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 反爬虫检测”

之前 SteamDB 自带 Cloudflare 的 5 秒等待防 DDOS,近期又添加了 hcaptcha 验证,这使之前写的爬虫失效了,现需要绕过验证页面,获取真实的网页信息

下文将展示如何绕过 hcaptcha,语言为 python,需要接入 2captcha 验证码识别平台

2captcha 也适用于其他验证码,如 reCaptcha、TikTok captcha、Arkose Labs FunCaptcha、文字验证码等等,绕过流程基本相同(非广告,仅作介绍)

准备

  • 2captcha API Key
    • 需充值,$2.99/1000次请求
  • python 3 环境
    • 使用 selenium 作为自动化测试工具
    • 需要引入 2captcha 官方 SDK 2captcha-python

参考

步骤

步骤大致如下:

浏览器打开页面,hcaptcha 出现

此时我们需要做的就是在本页面的 HTML 代码内找到代表当前验证会话的 sitekey,将 sitekey 连同网页 URL 提交到 2captcha 平台

之后等待 2captcha 运行自己的一套验证码破解流程,2captcha 破解完毕后会返回一个 token,拿到这个 token 后,将其提交到当前的 hcaptcha 页面

之后浏览器会自动跳转,相当于人工完成了验证

流程图如下:使用 2captcha 绕过验证码 Continue reading “使用 2captcha 绕过验证码”