Python - Selenium - không thể nhập nội dung văn bản cụ thể vào web từ html
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
Để 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
XPATHvà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"))Đầu ra bảng điều khiển:
Schneider Electric Holding Germany GmbHLư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
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.