在使用 SeleniumBase 抓取快递网站以截取跟踪页面的屏幕截图时,会检测到机器人并显示“选择相似图像”验证框。
网址:https://www.royalmail.com/track-your-item#/tracking-results/QF085212272GB
代码:
from seleniumbase import SB
fallback_ua = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'
chromium_arg = '--disable-gpu,--disable-blink-features=AutomationControlled'
with SB(uc=True, headless2=True, agent=fallback_ua, chromium_arg=chromium_arg) as sb:
url = "https://www.royalmail.com/track-your-item#/tracking-results/QF085212272GB"
sb.uc_open_with_reconnect(url, 3)
sb.sleep(1)
sb.save_screenshot('ss.png')
预期截图:
实际截图:
Docker化环境:
python3.9-slim
seleniumbase
:4.28.0
Chromium 浏览器:Chromium 126.0.6478.126 构建于 Debian 12.5,在 Debian 12.5 上运行
Chrome 驱动程序:ChromeDriver 126.0.6478.126 (d36ace6122e0a59570e258d82441395206d60e1c-refs/branch-heads/6478@{#1591})
虽然你也问过并且我已经从 GitHub 页面 (SeleniumBase/discussions/2892) 回答,但我会在这里发布解决方案,以防其他人遇到它:
看起来你正在改变一些不应该改变的事情。用这个代替:
from seleniumbase import SB
with SB(uc=True) as sb:
url = "https://www.royalmail.com/track-your-item#/tracking-results/QF085212272GB"
sb.uc_open_with_reconnect(url, 4)
sb.save_screenshot("myimage.png")
不要使用无头模式,不要更改默认的用户代理,也不要在 UC 模式下设置 chromium 参数。 UC 模式的默认设置可最大限度地提高您绕过机器人检测的机会。