亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Selenium 停留在“訪問 URL 之前檢查瀏覽器”

Selenium 停留在“訪問 URL 之前檢查瀏覽器”

互換的青春 2023-09-26 17:31:44
這是最近出現的問題,我認為是三四天前開始的。它沒有與我自己的系統隔離,因為我也在遠程服務器(Windows 10、Windows Server)上運行該軟件。它也沒有與任何特定的 URL 隔離,因為我現在無法通過任何具有此檢查的 URL。標題:“請稍等...”“訪問 URL 之前檢查您的瀏覽器”?!按诉^程是自動的。您的瀏覽器很快就會重定向到您請求的內容?!?nbsp;“請最多等待 5 秒...”“Cloudflare 提供的 DDos 保護”“Ray ID:xxxxxxxxxxxxxxxxxx”我嘗試過不同的系統(都基于Windows)我嘗試過不同的驅動程序(gecko 和 chrome)我嘗試過不同的網址from selenium import webdriver driver = webdriver.Chrome() driver.get('wwww.etherdelta.com')有誰知道我該如何解決這個問題;或者是時候放下可憐的老蒂米(程序)了?
查看完整描述

4 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

我在使用 Firefox 時也遇到了同樣的問題。我通過切換到 Chrome 解決了這個問題。

示例代碼:


from selenium import webdriver

url = "<WEBSITE>"

options = webdriver.ChromeOptions()

options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)

driver.get(url)

“--disable-blink-features=AutomationControlled”隱藏“navigator.webdriver”標志。

請參閱Selenium webdriver:修改 navigator.webdriver 標志以防止 selenium 檢測


編輯


您還必須更改 chromedriver 的一些默認變量。

使用 perl 的示例:


perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver

欲了解更多詳細信息,請查看原始帖子。

請參閱當您將 selenium 與 chromedriver 一起使用時,網站可以檢測到嗎?


編輯2


Cloudflare 不斷調整其算法,因此您可以嘗試使用未檢測到的 chromedriver,而不是手動更改 chromedriver。


unDetected-chromedriver是一個優化的 Selenium Chromedriver 補丁,不應觸發反機器人服務。它會自動下載驅動程序二進制文件并對其進行修補。


這是否有效取決于網站和當前的開發狀態。Cloudflare 似乎跟蹤unDetected-chromedriver的開發。


import undetected_chromedriver as uc

url = "<WEBSITE>"

driver= uc.Chrome()

driver.get(url)


查看完整回答
反對 回復 2023-09-26
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

在 Docker Linux 鏡像上使用 headless Selenium 時,我遇到了同樣的問題。


我通過在調用網絡驅動程序之前創建一個虛擬顯示器來解決這個問題:


from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 800))  

display.start()

不要忘記安裝 pyvirtualdisplay 和 xvfb: pip install pyvirtualdisplay并且sudo apt-get install xvfb


并且您必須刪除 ChromeDriver 中的“無頭”選項,這是我使用的完整代碼:


    #Display in order to avoid CloudFare bot detection

    display = Display(visible=0, size=(800, 800))  

    display.start()

  

    options = webdriver.ChromeOptions()

    options.add_argument('--no-sandbox')

    options.add_argument('start-maximized')

    options.add_argument('enable-automation')

    options.add_argument('--disable-infobars')

    options.add_argument('--disable-dev-shm-usage')

    options.add_argument('--disable-browser-side-navigation')

    options.add_argument("--remote-debugging-port=9222")

    # options.add_argument("--headless")

    options.add_argument('--disable-gpu')

    options.add_argument("--log-level=3")

    driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)

由于它在我的本地計算機上無需無頭即可正常工作,因此我認為模擬真實的顯示器也可以完成這項工作。我不太明白為什么,但據我了解,CloudFare 嘗試執行 JavaScript 代碼以確認您不是機器人。擁有模擬網頁顯示有助于做到這一點。


查看完整回答
反對 回復 2023-09-26
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

嘗試使用 Chrome 數據文件夾


from selenium import webdriver

from webdriver_manager.chrome import ChromeDriverManager

from webdriver_manager.utils import ChromeType


# Configure browser

options = webdriver.ChromeOptions()

options.add_argument(f"--user-data-dir=C:\\Users\\daria\\AppData\\Local\\Google\\Chrome\\User Data")

options.add_argument("--disable-blink-features=AutomationControlled")


chromedriver = ChromeDriverManager(chrome_type=ChromeType.GOOGLE, 

                                            log_level='0', 

                                            print_first_line=False).install()

driver = webdriver.Chrome(chromedriver, 

                                options=options,

                                service_log_path=None)


input ("End?")


查看完整回答
反對 回復 2023-09-26
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

這是因為瀏覽器使用來cloudfare保護自己免受DDOS (Distributed Denial Of Service) Attacks. 有兩種方法可以解決這個問題:

  1. 使用time.sleep- 如果網頁加載需要 5 秒,則只需使用time.sleep(5)。

  2. 使用WebDriverWait-- 例如,button帶有id“sample-btn”的 a 僅出現在該屏幕之后。那么你能做的是:

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By


btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'sample-btn'))) #Web driver waits for 10 seconds until element is visible

推薦第2個。但如果第二個不適合你,那就選擇第一個。希望這有幫助!


查看完整回答
反對 回復 2023-09-26
  • 4 回答
  • 0 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號