如何在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来加速它?

我正在抓取的一个网站https://www.betcris.pl/zaklady-live#/Soccer

你的代码片段有一个没有breakwhile True循环。这是一个无限循环的实现。从一个简短的片段中,我无法判断这是否是你"无限循环"的根本原因。问题,但可能是这样,检查您的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个数量级。抓取页面一次,快速解析它,如果您愿意,稍后再抓取页面。如果你只想读取内容,你根本不需要元素,只需要数据树。要与元素交互,您当然需要带有selenium的web元素,但要获取值和状态,快照可能就足够了。

或者您可以只对selenium做什么:将'no_betting_odds'添加到games_pathxpath。在我看来,你想抓住那些没有'no_betting_odds'类的元素。然后只需将'.//*[not contains(@class, "no_betting_odds")]'添加到games_path(您没有共享,因此我无法更新)。