使用 Headless 时的 HTTP 456 Chrome

HTTP 456 when using Headless Chrome

我正在尝试使用无头 chrome 导航到 https://my.waveapps.com,并收到 456 访问被拒绝。

我不知道为什么。

在正常模式下使用完全相同的铬二进制文件导航到相同的 url 工作正常。仅添加 --headless 选项会破坏它。

我正在使用 Chromium 66.0.3333.0

有两件事可以避免 Headless Chrome 被检测到:

  • 更改用户代理
  • 如果您通过 chromedriver 使用它,例如使用 Selenium,那么您还需要修补 chromedriver 可执行文件

更改用户代理

在无头模式下使用时,Chrome 更改其用户代理,将 Chrome 变为 HeadlessChrome,因此任何想要拒绝无头浏览器的人都可以轻松检测到它。

因此请务必将用户代理更改为看起来像普通浏览器,例如:

chrome \
    --disable-gpu \
    --headless \
    --remote-debugging-port=9222 \
    --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' \
    'https://my.waveapps.com/login/'

正在修补 chromedriver

中所述,您尝试访问的网站使用 Distil Networks 检测无头浏览器,为避免被检测到,您需要从 chromedriver 可执行文件中删除任何 "cdc_" 字符串,通过 运行 以下命令:

perl -pi -e 's/cdc_/aaa_/g' /path/to/chromedriver

用您喜欢的任意三个字符组合替换 aaa

似乎对我有用: