[英]How to read data from dynamic website faster in selenium
我有一些動態網站(足球現場投注)。 我沒有在 selenium 中閱讀所有 API。 我有無限循環,每次都在尋找元素。
while True:
elements = self.driver.find_elements_by_xpath(games_path)
for e in elements:
match = Match()
match.betting_opened = len(e.find_elements_by_class_name('no_betting_odds')) == 0
問題是它比我需要的慢一百倍。
有什么替代方法? 任何其他庫或如何使用 Selenium 加快速度?
你的代碼有一個while True
循環而不break
。 那是無限循環的實現。 從一個簡短的片段中,我無法判斷這是否是您的“無限循環”問題的根本原因,但可能是這樣,請檢查您的while
循環中是否有任何break
語句。
至於您問題的另一部分:我不確定您如何衡量無限循環的性能,但是有一種方法可以加快使用 selenium 解析頁面的速度:不使用 selenium。 從頁面中獲取快照並將其用於評估狀態、值和內容。
import lxml.html
page_snapshot = lxml.html.document_fromstring(self.driver.page_source)
games = page_snapshot.xpath(games_path)
這種方法比通過 selenium api 查詢快大約 2 個數量級。 抓取頁面一次,快速解析它,如果需要,稍后再抓取頁面。 如果你只想閱讀東西,你根本不需要 webelements,只需要數據樹。 要與元素交互,您當然需要使用 selenium 的 webelement,但要獲取值和狀態,快照可能就足夠了。
或者你只能用硒做什么:將'no_betting_odds'
添加到games_path
xpath。 在我看來,您想獲取那些沒有'no_betting_odds'
類的元素。 然后只需將'.//*[not contains(@class, "no_betting_odds")]'
到games_path
(您沒有共享,所以我無法更新)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.