为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2023-09-26 17:31:44
这是最近出现的问题,我认为是三四天前开始的。它没有与我自己的系统隔离,因为我也在远程服务器(Windows 10、Windows Server)上运行该软件。它也没有与任何特定的 URL 隔离,因为我现在无法通过任何具有此检查的 URL。标题:“请稍等...”“访问 URL 之前检查您的浏览器”。“此过程是自动的。您的浏览器很快就会重定向到您请求的内容。” “请最多等待 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 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信