Selenium-js Firefox访问bet365出现TimedPromise 300000ms超时问题求助
问题成因
- bet365站点部署了针对自动化浏览器的特征检测规则,确实可以识别Selenium启动的浏览器,不需要依赖访问频率、操作行为即可触发拦截。
- 你观察到的101状态码无响应,是站点的反爬WebSocket校验请求,检测到浏览器存在自动化特征后会拒绝握手,导致页面进入无限加载状态。
- 独有的
www.bet365.com/increment?desktop-site-loaded_11=1请求是反爬命中后的上报请求,可确认你的Selenium浏览器特征已经被识别。 - 你看到的
ff.kis.v2.scr.kaspersky-labs.com请求是反爬脚本的伪装请求,和卡巴斯基无关,是特征被识别后触发的干扰请求。
解决方案
代码修改方案
原生Selenium需要手动消除浏览器的自动化特征,修改后的代码如下:
const { Builder } = require('selenium-webdriver'); const firefox = require('selenium-webdriver/firefox'); async function run() { // 配置Firefox启动参数 const options = new firefox.Options(); // 禁用内置的webdriver标识 options.setPreference('dom.webdriver.enabled', false); options.setPreference('useAutomationExtension', false); // 移除Selenium默认添加的自动化启动标记 options.excludeSwitches('enable-automation'); // 调整页面加载策略,无需等待所有资源加载完成即可执行后续操作,避免超时 options.setPageLoadStrategy('eager'); // 可选:使用本地真实Firefox用户配置,进一步模拟真实用户,路径可在Firefox地址栏输入about:profiles查看 // options.setProfile('C:/Users/你的用户名/AppData/Roaming/Mozilla/Firefox/Profiles/xxxxxx.default-release'); const driver = await new Builder() .forBrowser('firefox') .setFirefoxOptions(options) .build(); // 页面加载前注入脚本,修改浏览器特征指纹 await driver.executeScript(` // 覆盖webdriver属性 Object.defineProperty(navigator, 'webdriver', { get: () => undefined, }); // 移除其他自动化相关全局变量 window.domAutomationControl = undefined; // 模拟真实浏览器的插件列表 Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5], }); // 模拟真实浏览器的语言设置 Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh', 'en'], }); `); await driver.get("https://bet365.com"); // 后续操作代码 } run();
额外优化建议
- 如果原生Selenium修改后仍然被拦截,可以替换为
undetected-playwright或者Node.js版本的undetected-chromedriver,这类工具默认已经消除了几乎所有自动化浏览器特征,反检测能力更强。 - 控制访问频率,模拟真实用户的点击、等待行为,避免短时间内大量请求触发IP级别的封禁。
- 首次访问如果出现人机校验,手动完成校验后保存浏览器profile,后续启动复用该profile即可避免重复校验。
内容的提问来源于stack exchange,提问作者Philipp Kolbe
相关产品推荐
相关产品推荐

