Python-Selenium-HTML에서 특정 텍스트 콘텐츠를 웹 스크랩 할 수 없습니다.
나는 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>
HTML 코드
이 사이트에서 :
https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4
이 코드로 :
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)
나는 4 시간 동안 그것을 시도했지만 그것을 얻을 수 없습니다. xpath, 링크 텍스트 등과 같은 다른 방법으로 시도했지만 "[]"와 같은 빈 회사 이름 만 있습니다.
셀레늄이 "Liebherr-Hausgeräte Ochsenhausen GmbH"라는 정확한 텍스트를 어떻게 찾을 수 있는지 아는 사람이 있습니까?
감사합니다.
답변
Schneider Electric Holding Germany GmbH 텍스트를 인쇄하려면에 대해 WebDriverWait 를 유도해야 visibility_of_element_located()하며 다음 로케이터 전략 중 하나를 사용할 수 있습니다 .
사용
CSS_SELECTOR및 텍스트 속성 :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)XPATH및 사용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"))콘솔 출력 :
Schneider Electric Holding Germany GmbH참고 : 다음 가져 오기를 추가해야합니다.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Selenium을 사용하여 WebElement의 텍스트를 검색하는 방법-Python 에서 관련 토론을 찾을 수 있습니다.
아우트로
유용한 문서 링크 :
- get_attribute() 방법
Gets the given attribute or property of the element. - text 속성 반환
The text of the element. - Selenium을 사용하는 텍스트와 innerHTML의 차이점
찾고있는 내용은 아래 페이지 의 소스 코드 에서 찾을 수 있습니다.
<div data-company-search><div data-var-name="companyResults" data페이지 소스의 일부입니다. 따라서 그것을 얻기 위해 셀레늄이 필요하지 않습니다. 요청이있는 페이지를 읽고 Beautiful Soup을 사용하여 데이터를 찾으십시오.