Python - Selenium - ne peut pas Webscrape du contenu de texte spécifique à partir de HTML

Aug 27 2020

j'essaye de webscrape cette partie d'un html:

<td class="zebraTable__td zebraTable__td--companyName"><a href="/unternehmen/8116602/schneider-electric-holding-germany-gmbh" data-gtm="companySearch__searchResult--76">
                        Schneider Electric Holding Germany GmbH
                    </a></td>

Code HTML

à partir de ce site:

https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4

avec ce code:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import pandas as pd
import time 

driver = webdriver.Chrome('/Users/rieder/Anaconda3/chromedriver_win32/chromedriver.exe')

driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=500&employeesTo=100000000&sortMethod=revenueDesc&p=1')

driver.find_element_by_id("cookiesNotificationConfirm").click();

company_name = driver.find_element_by_class_name('zebraTable__td zebraTable__td--companyName')

print(company_name)

Je l'ai essayé pendant 4 heures et je ne peux pas l'obtenir. Je l'ai essayé avec différentes méthodes comme xpath, le texte de lien, etc.

Quelqu'un sait-il comment le sélénium peut trouver ce texte exact "Liebherr-Hausgeräte Ochsenhausen GmbH"?

Merci beaucoup.

Réponses

DebanjanB Aug 27 2020 at 19:06

Pour imprimer le texte Schneider Electric Holding Germany GmbH, vous devez activer WebDriverWait pour le visibility_of_element_located()et vous pouvez utiliser l'une des stratégies de localisation suivantes :

  • Utilisation CSS_SELECTORet attribut de texte :

    driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#cookiesNotificationConfirm"))).click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.zebraTable.zebraTable--companies tr:nth-child(2)>td.zebraTable__td.zebraTable__td--companyName>a"))).text)
    
  • Utilisation XPATHet get_attribute("innerHTML"):

    driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='cookiesNotificationConfirm']"))).click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='zebraTable zebraTable--companies']//following::tr[2]/td[@class='zebraTable__td zebraTable__td--companyName']/a"))).get_attribute("innerHTML"))
    
  • Sortie de la console:

    Schneider Electric Holding Germany GmbH
    
  • Remarque : vous devez ajouter les importations suivantes:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Vous pouvez trouver une discussion pertinente dans Comment récupérer le texte d'un WebElement à l'aide de Selenium - Python


Outro

Lien vers la documentation utile:

  • get_attribute() méthode Gets the given attribute or property of the element.
  • text retour d'attribut The text of the element.
  • Différence entre texte et innerHTML en utilisant Selenium
balderman Aug 27 2020 at 18:53

Ce que vous recherchez se trouve dans le code source de la page sous

<div data-company-search><div data-var-name="companyResults" dataet cela fait partie de la source de la page. Vous n'avez donc pas besoin de sélénium pour l'obtenir. il suffit de lire la page contenant les demandes et de trouver les données à l'aide de Beautiful Soup.