簡體   English   中英

Selenium 得到響應碼 429 但 firefox 私有模式沒有

[英]Selenium gets response code of 429 but firefox private mode does not

在python3中使用Selenium打開一個頁面。 它不在 selenium 下打開,但在 firefox 私人頁面下打開。

有什么區別以及如何解決?

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('https://google.com') # creating a google cookie
driver.get_cookies() # check google gets cookies
sleep(3.0)
url='https://www.realestate.com.au/buy/in-sydney+cbd%2c+nsw/list-1'
driver.get(url)

不需要創建 google cookie。 它也不存在於 firefox 私人頁面下,但沒有它也可以工作。 但是,在 Selenium 下,行為不同。

我還看到網站返回[HTTP/2 429 Too Many Requests 173ms]狀態並且頁面是空白的白色。 在 firefox 私有模式下不會發生這種情況。

更新:

我打開了持久日志。 私有模式下的 Firefox 也會收到 429 響應,但似乎 javascript 將從另一個 url 恢復。 它只是第一次發生。

然而,在 selenium 上,請求無法在 429 響應中存活。 它確實向 cdndex 網站報告了一些內容。 我已經封鎖了那個網站,所以你看不到通過那里的請求 go。 這仍然是 firefox 和 selenium 之間的不同行為。

Selenium 與持久日志: 硒網絡

Firefox 與持久日志: 火狐網絡

這只是我在使用 selenium 和 webdriver 一段時間后的結果; 我懷疑這是由於 selenium 的默認用戶代理默認設置為蹩腳的東西,並且服務器端認識到這一點並為您提供了一個愚蠢的 HTTP 代碼和一個空白頁作為結果。

嘗試將用戶代理設置為合理的值和/或禁用 selenium 對默認值的干擾。

另一個技巧是使用 wireshark 或類似工具查看請求,以准確了解通過網絡發送的內容。

429 請求過多

HTTP 429 Too Many Requests響應狀態碼表示用戶在短時間內發送了太多請求。 429 狀態代碼旨在與速率限制方案一起使用。


根本原因

當您的服務器檢測到用戶代理在短時間內過於頻繁地嘗試訪問特定頁面時,它會觸發速率限制功能。 最常見的示例是用戶(或攻擊者)反復嘗試登錄 web 應用程序。

服務器還可以識別具有 cookies 的,而不是通過其登錄憑據。 請求也可以基於每個請求、跨您的服務器或跨多個服務器計算。 因此,有多種情況會導致您看到如下錯誤之一:

  • 429 請求過多
  • 429 錯誤
  • HTTP 429
  • 錯誤 429(請求過多)

這個用例

這個用例似乎是Selenium驅動的GeckoDriver啟動瀏覽上下文檢測為機器人的經典案例,原因如下:

Selenium 標識自己


參考

您可以在以下位置找到一些相關的詳細討論:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM