Python - Selenium - không thể nhập nội dung văn bản cụ thể vào web từ html

Aug 27 2020

tôi cố gắng tạo web phần này của 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>

Mã HTML

từ Trang web này:

https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4

với Mã này:

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)

Tôi đã thử nó trong 4 giờ và không thể nhận được nó. Tôi đã thử nó với các phương pháp khác nhau như xpath, văn bản liên kết, v.v. nhưng tất cả những gì tôi nhận được là Tên công ty trống như thế này "[]".

Có ai đó biết làm thế nào selen có thể tìm thấy đoạn văn bản chính xác này "Liebherr-Hausgeräte Ochsenhausen GmbH" không?

Cảm ơn rất nhiều.

Trả lời

DebanjanB Aug 27 2020 at 19:06

Để in văn bản Schneider Electric Holding Germany GmbH, bạn phải kích hoạt WebDriverWait cho visibility_of_element_located()và bạn có thể sử dụng một trong các Chiến lược định vị sau:

  • Sử dụng CSS_SELECTORvà thuộc tính văn bản :

    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)
    
  • Sử dụng XPATHget_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"))
    
  • Đầu ra bảng điều khiển:

    Schneider Electric Holding Germany GmbH
    
  • Lưu ý : Bạn phải thêm các lần nhập sau:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Bạn có thể tìm thấy một cuộc thảo luận có liên quan trong Cách lấy văn bản của WebElement bằng Selenium - Python


Outro

Liên kết đến tài liệu hữu ích:

  • get_attribute() phương pháp Gets the given attribute or property of the element.
  • text trả về thuộc tính The text of the element.
  • Sự khác biệt giữa text và innerHTML khi sử dụng Selenium
balderman Aug 27 2020 at 18:53

Những gì bạn đang tìm kiếm có thể được tìm thấy trong mã nguồn của trang dưới

<div data-company-search><div data-var-name="companyResults" datavà nó là một phần của nguồn trang. Vì vậy, bạn không cần selen để có được nó. chỉ cần đọc trang có yêu cầu và tìm dữ liệu bằng Beautiful Soup.