[英]Selenium not able to find particular elements on slow loading page
我正在嘗試抓取網站籃球參考,但遇到了一個我似乎無法解決的問題。 我正在嘗試為每個玩過的游戲獲取盒子得分元素。 這是我可以用 urlopen 輕松完成的事情,但是 b/c 網站的其他部分需要 Selenium 我想我會用 Selenium 重寫整個過程
問題似乎是,即使我等到使用 WebDriverWait 看到第一個元素加載時才開始抓取,當我繼續抓取元素時,我什么也得不到。
我發現有趣的一件事是,如果我使用來自 urlopen 的結果與 print (uClient.read()) 之類的東西進行完整的站點打印,與使用 print (驅動程序.page_source)。 即使我將 ImplicitlyWait 設置為 5 分鍾。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('/usr/local/bin/chromedriver')
driver.wait = WebDriverWait(driver, 10)
driver.get('https://www.basketball-reference.com/boxscores/')
driver.wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="content"]/div[3]/div[1]')))
box = driver.find_elements_by_class_name('game_summary expanded nohover')
print (box)
driver.quit()
試試下面的代碼,它在我的電腦上工作。 如果您仍然遇到問題,請告訴我。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.wait = WebDriverWait(driver, 60)
driver.get('https://www.basketball-reference.com/boxscores/')
driver.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="content"]/div[3]/div[1]')))
boxes = driver.wait.until(
EC.presence_of_all_elements_located((By.XPATH, "//div[@class=\"game_summary expanded nohover\"]")))
print("Number of Elements Located : ", len(boxes))
for box in boxes:
print(box.text)
print("-----------")
driver.quit()
如果它解決了您的問題,請將其標記為答案。 謝謝
實際上,該站點根本不需要 selenium。 所有數據都通過一個簡單的請求(它只是在 html 的評論中,只需要解析它)。 其次,您可以使用 pandas 輕松獲取得分
import pandas as pd
dfs = pd.read_html('https://www.basketball-reference.com/boxscores/')
for idx, table in enumerate(dfs[:-2]):
print (table)
if (idx+1)%3 == 0:
print("-----------")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.