如何绕过 selenium 中的 Cloudflare bot 保护

How to bypass Cloudflare bot protection in selenium

出于教育目的,我需要从网站获取一些信息,但是由于保护我无法发送请求。我得到典型的检查您的浏览器页面首先出现,然后我被反复重定向。 我如何在 python selenium 中绕过这种保护?

我很久以前就遇到过这个问题,我能够解决它。使用下面的代码并享受:)

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options, executable_path=r"webdriver\chromedriver.exe")

///////// 编辑 /////////////// 这种方式现在行不通了!

2021 年 7 月解决方案

只需在 chrome 选项中添加用户代理参数并将用户代理设置为任意值

ops = Options() ua='cat' ops.add_argument('--user-agent=%s' % ua) driver=uc.Chrome(executable_path=r"C:\chromedriver.exe",chrome_options=ops)

截至 2022 年 3 月:

嗨,我在 Docker Linux 图像上使用 headless Selenium 时遇到了同样的问题。

我通过在调用 webdriver 之前创建一个虚拟显示器解决了这个问题:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))  
display.start()

别忘了 安装 pyvirtualdisplay 和 xvfb: pip install pyvirtualdisplaysudo apt-get install xvfb

并且你必须删除 ChromeDriver 中的“headless”选项,这里是我使用的完整代码:

    #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 代码以确认您不是机器人。拥有模拟网页显示有助于做到这一点。

反应有点晚,难怪为什么开发人员仍然反复面对这个问题。我正在使用 Java v17 和 Gradle v7.4.2。 我的解决方案与上面解释的有关,但代码在 Java.

@Before
public void setup() {
    WebDriverManager.chromedriver().setup();
    ChromeOptions options = new ChromeOptions();
    // Bypass Cloudflare checks
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--disable-blink-features=AutomationControlled");
    driver = new ChromeDriver(options);
    driver.manage().window().maximize();
}

有关详细信息,请参阅 Selenium Chrome 选项 documentation

编码愉快。