繁体   English   中英

Selenium Python 从动态表中提取数据,每 5 秒刷新一次

[英]Selenium Python Pull Data from Dynamic Table that refreshes every 5 seconds

我正在尝试从每 5 秒刷新一次的实时表/仪表板中提取数据。 因为它每 5 秒刷新一次,所以它给了我不完整的记录[我认为从第 1 行开始直到它刷新]。 有没有办法解决这个问题,我可以禁用自动刷新一段时间,可能是 15 秒?

您可以使用请求并获取页面,然后数据就完整了。

import requests
import time

while True:
    url = "insert url here"
    page = requests.get(url)

    # Parse data

    time.sleep(5)

从评论中,您有几种方法。 由于您无法分享您的网站,我能做的最好的事情就是描述您需要做什么以及我如何让您的等效网站正常工作。

这两种方法都使用http://www.emojitracker.com/作为示例站点。

方法 1 - 在网络层获取数据:

  • 使用 chrome 访问您的网站。
  • 打开开发者工具
  • 转到网络选项卡
  • 找到下拉数据的调用 - 您正在寻找 GET

对于提供的示例站点,我可以看到我有一个名为rankings的条目,如下所示: 开发工具网络

HEADERS选项卡描述了您需要的数据。 对于这个站点,没有身份验证,没有什么特别的,我不需要发送任何有效负载。 这只是需要的 API 和方法:

Request URL: http://www.emojitracker.com/api/rankings
Request Method: GET

把它扔进pyhton再简单不过了:

import requests

response = requests.get("http://www.emojitracker.com/api/rankings")
data = response.json()
for line in data:
    print(line['id'])
    print(line['score'])

这会从 json 响应中打印出分数和 ID。 这是我们调试时的样子: 在 vscode 中调试


方法 2 - 破解 javascript

  • 转到网站,让页面加载
  • 去开发工具
  • 去控制台
  • 选择源选项卡并暂停 javascript(右上角) - 注意光标停止的位置。 重新启动和暂停几次并注意所涉及的不同功能。 还要看看他们做什么来辨别所涉及的其他功能。

准备好后 - 转到控制台选项卡并键入this.stop() 在您提供的站点上,这会停止更新调用。

这应该会给你足够的时间来获取你的数据。

从这里开始,您有两种选择可以让您的数据再次运行。

  1. 最简单的方法是刷新页面。 这将使用新的流数据重新启动页面。 这样做:
driver.refresh()
  1. 更有趣的方式,阅读js并弄清楚如何重新启动流! 使用控制台的智能感知来帮助您。

查看 JS,它在何处暂停(从上面的步骤中),以及我发现的一些尝试和错误:

this.startRawScoreStreaming()

它做这个输出

application.js:90 Subscribing to score stream (raw)
ƒ (event) {
      return incrementScore(event.data);
    }

页面再次开始流式传输。

最后,要在 selenium 中运行这些 JS 片段 - 您使用.execute_script

driver.execute_script('this.stop()')
## do your stuff
driver.execute_script('this.startRawScoreStreaming()')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM