Python - Selenium - tidak dapat membuat webscrape konten teks tertentu dari html
saya mencoba untuk membuat webscrape bagian dari html ini:
<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>
Kode HTML
dari Situs ini:
https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4
dengan Kode ini:
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)
Saya mencobanya selama 4 jam dan tidak bisa mendapatkannya. Saya mencobanya dengan metode yang berbeda seperti xpath, teks tautan dll. Tetapi yang saya dapatkan hanyalah Nama perusahaan kosong seperti ini "[]".
Apakah seseorang tahu bagaimana selenium dapat menemukan bagian teks yang tepat ini "Liebherr-Hausgeräte Ochsenhausen GmbH"?
Terima kasih banyak.
Jawaban
Untuk mencetak teks Schneider Electric Induk Jerman GmbH Anda harus mendorong WebDriverWait untuk visibility_of_element_located()dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :
Menggunakan
CSS_SELECTORdan atribut teks :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)Menggunakan
XPATHdanget_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"))Keluaran Konsol:
Schneider Electric Holding Germany GmbHCatatan : Anda harus menambahkan impor berikut:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Anda dapat menemukan diskusi yang relevan di Cara mengambil teks WebElement menggunakan Selenium - Python
Outro
Tautan ke dokumentasi yang berguna:
- get_attribute() metode
Gets the given attribute or property of the element. - text atribut kembali
The text of the element. - Perbedaan antara teks dan innerHTML menggunakan Selenium
Apa yang Anda cari dapat ditemukan di kode sumber halaman di bawah
<div data-company-search><div data-var-name="companyResults" datadan itu adalah bagian dari sumber halaman. Jadi Anda tidak membutuhkan selenium untuk mendapatkannya. cukup baca halaman dengan permintaan dan temukan datanya menggunakan Beautiful Soup.