如何自动化登录可检测selenium-stealth登录尝试的网站?
可行解决方案如下:
1 优先调整现有Selenium配置
你当前的代码有两个核心问题导致极易被识别:
- 你用了旧版无头模式
--headless,这类模式的浏览器指纹特征已经被绝大多数金融站点的反爬系统收录,直接触发拦截。要么直接关闭无头模式用有界面运行,要么替换为Chrome 112+版本支持的新版无头参数--headless=new,该模式下指纹和正常浏览器几乎无差异。 - 缺少核心的反检测参数,需要补充以下配置:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium_stealth import stealth import time import random chrome_options = webdriver.ChromeOptions() # 替换旧版无头参数,不需要无头就直接删除这行 chrome_options.add_argument('--headless=new') chrome_options.add_argument('--no-sandbox') # 新增启动参数,移除浏览器自带的自动化标记 chrome_options.add_argument('--disable-blink-features=AutomationControlled') # 指定和你本地正常使用的Chrome完全一致的UA,可直接通过浏览器访问UA查询页获取后填进去 chrome_options.add_argument('user-agent=替换为你自己的浏览器UA') # 建议指定你本地安装的Chrome的可执行文件路径,不要用Selenium自动下载的Chromium内核 chrome_options.binary_location = "你的Chrome安装路径,比如C:/Program Files/Google/Chrome/Application/chrome.exe" chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options) stealth(wd, languages=["en-US", "en"], vendor="Google Inc.", platform="Win32", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True, ) wd.get("https://us.etrade.com/e/t/user/login") # 新增随机等待,不要立刻操作页面 time.sleep(random.uniform(2,4)) - 后续填写账号密码、点击登录按钮时,不要一次性输入完成或者直接调用click方法,模拟真人输入速度,每个字符输入间隔随机100-500ms,点击前通过ActionChains模拟鼠标移动轨迹再触发点击。
2 替换自动化工具方案
如果调整Selenium配置后仍然被拦截,可以更换工具栈:
- 改用Playwright,默认启动时已经屏蔽了绝大多数自动化特征,配合
playwright-stealth插件可以实现更高的伪装度,比Selenium的改造成本更低。 - 采用本地浏览器接管方案:先手动启动你日常使用的Chrome,启动时添加参数
--remote-debugging-port=9222,再让Selenium直接连接这个已经运行的Chrome实例,该浏览器本身就是正常用户的指纹,几乎不会被反爬系统识别。 - 如果纯接口请求无法实现,可抓包完整的登录请求流,把所有动态生成的请求参数、Cookie、csrf令牌、JS埋点生成的指纹参数全部模拟完整后再用requests发起请求,金融站点的登录接口通常会校验十多项参数,缺任意一项都会被拦截。
内容的提问来源于stack exchange,提问作者Newprogrammer
相关产品推荐
相关产品推荐

