Python - Selenium - ne peut pas Webscrape du contenu de texte spécifique à partir de HTML
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
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
XPATHetget_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 GmbHRemarque : 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
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.