Python - Selenium - no se puede copiar contenido de texto específico de HTML desde HTML
trato de webscrape esta parte de 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>
código HTML
de este sitio:
https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4
con este Código:
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)
Lo probé durante 4 horas y no puedo conseguirlo. Lo intenté con diferentes métodos como xpath, texto de enlace, etc. pero todo lo que obtuve es un nombre de empresa vacío como este "[]".
¿Alguien sabe cómo el selenio puede encontrar este texto exacto "Liebherr-Hausgeräte Ochsenhausen GmbH"?
Muchas gracias.
Respuestas
Para imprimir el texto Schneider Electric Holding GmbH Alemania tiene que inducir WebDriverWait para el visibility_of_element_located()y se puede utilizar cualquiera de las siguientes estrategias de localización :
El uso
CSS_SELECTORy el texto del atributo: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)Usando
XPATHyget_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"))Salida de consola:
Schneider Electric Holding Germany GmbHNota : Debe agregar las siguientes importaciones:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Puede encontrar una discusión relevante en Cómo recuperar el texto de un WebElement usando Selenium - Python
Outro
Enlace a documentación útil:
- get_attribute() método
Gets the given attribute or property of the element. - text devoluciones de atributos
The text of the element. - Diferencia entre texto e innerHTML usando Selenium
Lo que busca se puede encontrar en el código fuente de la página bajo
<div data-company-search><div data-var-name="companyResults" datay es parte de la fuente de la página. Por lo tanto, no necesita selenio para obtenerlo. simplemente lea la página con las solicitudes y encuentre los datos usando Beautiful Soup.