Python - Selenium - html'den belirli metin içeriğini web taraması yapamaz
html'nin bu bölümünü web'de taramaya çalışıyorum:
<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 Kodu
Bu Siteden:
https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4
bu Kod ile:
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 saat denedim ve alamıyorum. Bunu xpath, link text gibi farklı yöntemlerle denedim ama sahip olduğum tek şey bunun gibi "[]" gibi boş bir şirket adı.
Selenyumun tam olarak bu "Liebherr-Hausgeräte Ochsenhausen GmbH" metnini nasıl bulabileceğini bilen var mı?
Çok teşekkürler.
Yanıtlar
Metni yazdırmak için Schneider Electric Holding Germany GmbH Eğer ikna etmek zorunda WebDriverWait için visibility_of_element_located()ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :
Kullanım
CSS_SELECTORve metin özelliği: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)Kullanılması
XPATHveget_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"))Konsol Çıkışı:
Schneider Electric Holding Germany GmbHNot : Aşağıdaki içe aktarmaları eklemeniz gerekir:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Selenium - Python kullanarak bir WebElement metninin nasıl alınacağı konusunda ilgili bir tartışma bulabilirsiniz.
Outro
Yararlı belgelere bağlantı:
- get_attribute() yöntem
Gets the given attribute or property of the element. - text öznitelik iadeleri
The text of the element. - Selenium kullanarak metin ve iç HTML arasındaki fark
Ne arıyorsun bulunabilir sayfanın kaynak kodunda altında
<div data-company-search><div data-var-name="companyResults" datave sayfa kaynağının bir parçasıdır. Yani onu elde etmek için selenyuma ihtiyacınız yok. Sadece isteklerle birlikte sayfayı okuyun ve Beautiful Soup kullanarak verileri bulun.