Python - Selenium - html'den belirli metin içeriğini web taraması yapamaz

Aug 27 2020

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

DebanjanB Aug 27 2020 at 19:06

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ı XPATHve 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"))
    
  • Konsol Çıkışı:

    Schneider Electric Holding Germany GmbH
    
  • Not : 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
balderman Aug 27 2020 at 18:53

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.