Selenium 停留在“在访问 URL 之前检查您的浏览器”

glo*_*fit 13 python selenium

这是最近的问题,我想是三四天前开始的。它并没有与我自己的系统隔离,因为我也在远程服务器(Windows 10、Windows Server)上运行该软件。它也不是孤立于任何特定 URL,因为我现在无法通过任何具有此检查的 URL。

标题:“稍等……”“在访问 URL 之前检查您的浏览器”。“这个过程是自动的。你的浏览器很快就会重定向到你请求的内容。” “请允许最多 5 秒……”“Cloudflare 的 DDos 保护”“Ray Id:xxxxxxxxxxxxxxxxxx”

  • 我尝试过不同的系统(均基于 Windows)
  • 我尝试过不同的驱动程序(壁虎和铬)
  • 我尝试了不同的网址
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('wwww.etherdelta.com')
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何解决这个问题;或者是时候放下可怜的提米(程序)了吗?

MrT*_*iny 11

我在 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)
Run Code Online (Sandbox Code Playgroud)

“--disable-blink-features=AutomationControlled”隐藏“navigator.webdriver”标志。
请参阅Selenium webdriver:修改 navigator.webdriver 标志以防止 selenium 检测

编辑

您还必须更改 chromedriver 的一些默认变量。
perl 示例:

perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看原始帖子。
请参阅网站能否检测到您在 chromedriver 中使用 selenium 的情况?

编辑 2

Cloudflare 不断调整他们的算法,因此您可以尝试使用未检测到的 chromedriver而不是手动更改 chromedriver。

undetected-chromedriver是一个优化的 Selenium Chromedriver 补丁,它不会触发反机器人服务。它会自动下载驱动程序二进制文件并修补它。

这是否可行取决于网站和当前的开发状态。Cloudflare 似乎在跟踪undetected-chromedriver的发展。

import undetected_chromedriver as uc
url = "<WEBSITE>"
driver= uc.Chrome()
driver.get(url)
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了未检测到的 chromedriver,但不幸的是,它陷入了相同的 Cloudflare 保护阶段。 (3认同)
  • 这个答案几天前在我使用硒的一些网站上停止工作。不确定是什么改变了/导致了它。 (2认同)

Sus*_*hil 1

这是因为浏览器使用来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
Run Code Online (Sandbox Code Playgroud)

推荐第2个。但如果第二个不适合你,那就选择第一个。希望这有帮助!