Hier ist eine Zusammenfassung der Methode execute_script, die beim Web-Scraping mit Selen nützlich ist. execute_script führt die in JavaScript auf der Webseite beschriebene Operation aus.
Beim Web-Scraping mit Selen wird die Seitenverarbeitung normalerweise durchgeführt, indem Elemente mit den Methoden find_element und find_elements angegeben und die click-Methode ausgeführt werden.
#Klicken Sie auf Aktion(Beispiel: einreichen_Eine Klasse namens btn,"Senden"Eingabeelement mit Wert)
@driver.find_element(:class,'submit_btn').click #Von Klasse angegeben
@driver.find_element(:css,"input[value='Senden']").click #Spezifiziert durch CSS
#Wert eingeben
@driver.find_element(:name,'favorite_food').send_keys('ramen')
#Finden Sie die Anzahl der Elemente heraus
@driver.find_elements(:class, '.btn').size #Überprüfen Sie die Anzahl der Tasten.
Die find_element (s) oben sind etwas nervig, da Sie jedes Mal Ruby ausführen müssen, um sicherzustellen, dass Sie das Element korrekt angegeben haben. Implementieren wir also dieselbe Operation mit execute_script wie folgt.
#Klicken Sie auf Aktion
@driver.execute_script(%{document.querySelector('.submit_btn').click();}) #Von Klasse angegeben
@driver.execute_script(%{document.querySelector("input[value='Senden']").click();}) #Spezifiziert durch CSS
#Wert eingeben
@driver.execute_script(%{document.querySelector("[name='favorite_food']").value = 'ramen';})
#Finden Sie die Anzahl der Elemente heraus
@driver.execute_script(%{return document.querySelectorAll('.btn').length;}) #Überprüfen Sie die Anzahl der Tasten
Schreiben Sie den JavaScript-Code, den Sie ausführen möchten, direkt in das Argument execute_script. Auf diese Weise können Sie während der Ausführung von Javascript in einem Webbrowser entwickeln. Im Fall von Chrome können Sie es ausführen, indem Sie einfach JavaScript auf der Registerkarte Konsole der Entwicklertools eingeben. Dies reduziert die Anzahl der Hin- und Rückfahrten zwischen Redakteuren und Terminals drastisch und ermöglicht eine effiziente Entwicklung.
Es ist auch wünschenswert, die Methodenpartitionierung umzugestalten, um Redundanz und Lesbarkeit zu verringern. Übergeben Sie in diesem Fall den CSS-Selektor und den Wert, den Sie senden möchten, als Argumente.
#Klicken Sie auf Aktionsmethode
def query_click(css_selector)
@driver.execute_script(%{document.querySelector("#{css_selector}").click();})
end
#Methode zur Eingabe eines Wertes
def value_input(css_selector,value)
@driver.execute_script(%{document.querySelector("#{css_selector}").value = "#{value}";})
end
#Methode zum Überprüfen der Anzahl der Elemente
def query_count(css_selector)
@driver.execute_script(%{return document.querySelectorAll("#{css_selector}").length;})
end
query_click('.submit_btn') #Nach Klasse angeben und klicken
query_click("input[value='Senden']") #Mit CSS angeben und klicken
value_input("[name='favorite-food']",'ramen') #Wert eingeben
query_count('.btn') #Finden Sie die Anzahl der Schaltflächen heraus
Ich habe zusammengefasst, wie Selenium JavaScript mit execute_script ausführen kann. Da JavaScript nicht seitenübergreifend verarbeitet werden kann, ist es möglicherweise besser, find_element zu verwenden, wenn Sie eine wiederholte Verarbeitung durch Übergang von Seiten durchführen möchten. Wenn Sie beide verwenden können, wird sich das Web-Scraping meiner Meinung nach verbessern. Bitte nutzen Sie es.