簡體   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