我已經在python中編寫腳本並結合selenium來解析網頁中的名稱。該網站的數據不支持JavaScript。但是,下一頁鏈接在JavaScript內。由於該網頁的下一頁鏈接對於requests
庫而言沒有用處,因此我使用硒來解析來自該網站的數據,並遍歷了25個頁面。我在這裏面臨的唯一問題是,儘管我的刮板能夠通過點擊25頁到達最後一頁,但它僅從第一頁獲取數據。而且,即使點擊了最後一頁,刮刀仍然繼續運行。下一頁鏈接看起來完全像javascript:nextPage();
。順便說一句,即使我點擊下一頁按鈕,該網站的網址永遠不會改變。我怎樣才能從25頁獲得所有的名字?我在刮刀中使用的CSS選擇器完美無瑕。提前致謝。刮板無法從下一頁獲取名稱
這裏是我寫的東西:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.hsi.com.hk/HSI-Net/HSI-Net?cmd=tab&pageId=en.indexes.hscis.hsci.constituents&expire=false&lang=en&tabs.current=en.indexes.hscis.hsci.overview_des%5Een.indexes.hscis.hsci.constituents&retry=false")
while True:
for name in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table.greygeneraltxt td.greygeneraltxt,td.lightbluebg"))):
print(name.text)
try:
n_link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[href*='nextPage']")))
driver.execute_script(n_link.get_attribute("href"))
except: break
driver.quit()
你打我吧......我不認爲第一位將工作因爲你不能在使用Selenium的不可見元素上使用'get_attribute()'。我打算建議他使用JSE,例如'.execute_script(「return arguments [0] .innerText」,name)'在你的情況。 – JeffC
@JeffC,'text'屬性不允許獲取隱藏元素的內容。 'get_attribute('textContent')'[爲此目的正常工作](https://stackoverflow.com/questions/43429788/python-selenium-finds-h1-element-but-returns-empty-text-string/43430097# 43430097) – Andersson
感謝sir Andersson提供這樣一個強大的解決方案。有一天我會想出一個難以解決的難題,因爲你已經立於不敗之地。再次感謝。 – SIM