20-10-27 更新:此方法对 steamdb 已失效

与 Cloudflare 的检测页面简直是一场无休止的斗争,一开始 Cloudflare 不会检测 Selenium,所以只需要手动等待 5 秒即可跳转到原始页面,后来 Cloudflare 加了 hcaptcha,于是我又使用了验证码识别平台 2captcha,详见

就在我写完 2captcha 没多久,Cloudflare 又更换了检测策略,页面还是和原来 5 秒检测页面一样,但是会检测到 Selenium 自动化,让你无限卡在验证页面不停加载

本文将分别展示在 Python 和 C# 下,如何使用 Selenium 通过 Cloudflare 的 5 秒检测页面

当然此对策只适用于当前的检测手段,Cloudflare 未来必然会再次更改检测策略 : )

Python

Python 想要通过检测比较简单,更换使用的库即可

经过一番搜索,发现很多针对 Cloudflare 检测的爬虫库都已经 Archive 了,还在更新的 cfscrape 也有一堆 issue 表示失效。但是,在 cfscrape 最新的一个 issue 中找到了 chromedriver 的魔改版 ultrafunkamsterdam / undetected-chromedriver ,此项目在近期的 1.5.0 更新中解决了 Cloudflare 的爬虫检测问题

  1. 首先安装 undetected_chromedriver
    pip install undetected_chromedriver
  2. 按如下代码新建 driver 对象
    import undetected_chromedriver as uc
    
    browser = uc.Chrome()
    browser.get(url)
    time.sleep(delay)
    html = browser.page_source

这样就可以成功通过 Chloudflare 检测,实测 steamdb.info 可以成功通过

C#(.NET)

.NET 平台没有类似 undetected_chromedriver 这样的 Nuget 包,但是从源码中可以看出,undetected_chromedriver 相较于原版 chromedriver 只做了两件事:

  1. 魔改 chromedriver.exe
  2. 添加两个启动参数如何通过 Cloudflare 反爬虫检测

所以我们只需要拿到魔改后的 chromedriver,再添加与 undetected_chromedriver 中相同的两个参数即可通过反爬虫检测

魔改后的 chromedriver 可以直接复制 python 中 undetected_chromedriver 代码运行后生成的 chromedriver.exe,将其放在系统 PATH 内,C# 代码执行时会直接调用系统 PATH 的 chromedriver

代码如下:

using OpenQA.Selenium.Chrome;

internal ChromeDriver CreateDriver() {
    var chromeOptions = new ChromeOptions();
    chromeOptions.AddArgument("start-maximized");
    chromeOptions.AddArgument("--disable-blink-features=AutomationControlled");
    var mychrome = new ChromeDriver(chromeOptions);
    return mychrome;
}

Continue reading “如何通过 Cloudflare 反爬虫检测”

  • 进入Software Reporter Tool的目录
    • Win+R打开运行,粘贴【%localappdata%\Google\Chrome\User Data\SwReporter】
    • 进入后选择对应版本文件夹(我这里只有一个)
  • 右键software_reporter_tool.exe选择属性
  • 打开【安全】选项卡,点击【高级】
  • 点击【禁用继承】
  • 在弹出的对话框选择【从此对象中删除所有继承的权限】,之后点击确定

这样本计算机的用户就无法访问并启动Software Reporter Tool。再次打开chrome也不会出现Software Reporter Tool的进程。