Voici un résumé de la méthode execute_script qui est utile lors du scraping Web avec Selenium. execute_script exécute l'opération décrite en JavaScript sur la page Web.
Lors du scraping Web avec Selenium, le traitement de la page est généralement effectué en spécifiant des éléments avec les méthodes find_element et find_elements et en exécutant la méthode click.
#Cliquez sur l'action(Exemple: soumettre_Une classe appelée btn,"Envoyer"Élément d'entrée avec valeur)
@driver.find_element(:class,'submit_btn').click #Spécifié par classe
@driver.find_element(:css,"input[value='Envoyer']").click #Spécifié par CSS
#Entrez une valeur
@driver.find_element(:name,'favorite_food').send_keys('ramen')
#Découvrez le nombre d'éléments
@driver.find_elements(:class, '.btn').size #Vérifiez le nombre de boutons.
Le ou les éléments de recherche ci-dessus sont un peu ennuyeux car vous devez exécuter ruby à chaque fois pour vous assurer que vous avez correctement spécifié l'élément. Alors, implémentons la même opération avec execute_script comme suit.
#Cliquez sur l'action
@driver.execute_script(%{document.querySelector('.submit_btn').click();}) #Spécifié par classe
@driver.execute_script(%{document.querySelector("input[value='Envoyer']").click();}) #Spécifié par CSS
#Entrez une valeur
@driver.execute_script(%{document.querySelector("[name='favorite_food']").value = 'ramen';})
#Découvrez le nombre d'éléments
@driver.execute_script(%{return document.querySelectorAll('.btn').length;}) #Vérifiez le nombre de boutons
Écrivez le code JavaScript que vous souhaitez exécuter directement dans l'argument de execute_script. En faisant cela, vous pouvez développer tout en exécutant Javascript dans un navigateur Web. Dans le cas de chrome, vous pouvez l'exécuter en tapant simplement JavaScript dans l'onglet Console des outils de développement. Cela réduit considérablement le nombre d'allers-retours entre les éditeurs et les terminaux, permettant un développement efficace.
Il est également souhaitable de refactoriser avec le partitionnement de méthode pour réduire la redondance et la lisibilité. Dans ce cas, transmettez le sélecteur css et la valeur que vous souhaitez envoyer comme arguments.
#Cliquez sur la méthode d'action
def query_click(css_selector)
@driver.execute_script(%{document.querySelector("#{css_selector}").click();})
end
#Méthode pour saisir une valeur
def value_input(css_selector,value)
@driver.execute_script(%{document.querySelector("#{css_selector}").value = "#{value}";})
end
#Méthode pour vérifier le nombre d'éléments
def query_count(css_selector)
@driver.execute_script(%{return document.querySelectorAll("#{css_selector}").length;})
end
query_click('.submit_btn') #Spécifiez par classe et cliquez sur
query_click("input[value='Envoyer']") #Spécifiez avec css et cliquez sur
value_input("[name='favorite-food']",'ramen') #Entrez une valeur
query_count('.btn') #Découvrez le nombre de boutons
J'ai résumé comment faire exécuter JavaScript par Selenium par execute_script. Étant donné que JavaScript ne peut pas traiter les pages, il peut être préférable d'utiliser find_element lorsque vous souhaitez effectuer un traitement répété en effectuant une transition de pages. Si vous pouvez utiliser les deux, je pense que le web scraping s'améliorera. Veuillez en profiter.