022.(附加)chromedriver编译-绕过selenium机器人检测

  • 有小伙伴说使用selenium没能绕过机器人检测,盘他。

一、selenium简介

  • Selenium 是一个强大的工具,用于Web浏览器自动化,更常被用于爬虫
  • 但selenium需要通过webdriver来驱动chrome,每次运行selenium时,都要先找到对应版本的chromedriver.exe。
  • chromedriver自动化会对浏览器的部分属性进行修改,非常容易被识别为机器人。
  • pypeeteer却没有这种烦恼,它不需要中间驱动,所以还是建议大家使用pyppeteer。但如果你已经写了上万行selenium代码了,那还是编译一个驱动吧。

二、机器人识别网站

很明显,常规网站都能检测到selenium机器人。

三、检测原理

  • 将下面的js代码复制粘贴进F12控制台:
js 复制代码
// 定义正则表达式
let regex = /^([a-z]){3}_.*_(Array|Promise|Symbol|JSON|Object|Proxy)$/;
// 获取window对象的所有属性名称
let allProps = Object.getOwnPropertyNames(window);
// 过滤出符合正则表达式的属性名称
let filteredProps = allProps.filter(prop => regex.test(prop));
// 输出匹配的属性名
console.log(filteredProps);
  • 正常浏览器会打印
js 复制代码
[]
  • 被selenium控制的浏览器会打印
js 复制代码
(6) ['cdc_adoQpoasnfa76pfcZLmcfl_Array', 'cdc_adoQpoasnfa76pfcZLmcfl_Object', 
'cdc_adoQpoasnfa76pfcZLmcfl_Promise', 'cdc_adoQpoasnfa76pfcZLmcfl_Proxy', 
'cdc_adoQpoasnfa76pfcZLmcfl_Symbol', 'cdc_adoQpoasnfa76pfcZLmcfl_JSON']

注意:这就是这2个站检测selenium机器人的核心逻辑。pypeeteer机器人已经不用担心,网站检测不到。

四、编译crhomedriver.exe

注意,这里依旧是全网独一份哈。

  • 打开chromium源码文件:\chrome\test\chromedriver\chrome\devtools_client_impl.cc
1.找到:
c 复制代码
std::string script =
        "(function () {"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Array = window.Array;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Object = window.Object;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Promise = window.Promise;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Proxy = window.Proxy;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol = window.Symbol;"
        "window.cdc_adoQpoasnfa76pfcZLmcfl_JSON = window.JSON;"
        "}) ();";
    params.Set("source", script);
2.替换为:
c 复制代码
std::string script =
        "(function () {"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Array = window.Array;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Object = window.Object;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Promise = window.Promise;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Proxy = window.Proxy;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol = window.Symbol;"
        //"window.cdc_adoQpoasnfa76pfcZLmcfl_JSON = window.JSON;"
        "}) ();";
    params.Set("source", script);
3.编译:
c 复制代码
ninja  -C  out/Default chromedriver

注意:编译完后,会在out/Default目录下生成一个chromedriver.exe文件,这就是驱动。

五、验证

  • 将生成的chromedriver.exe拿过来,运行下面的python代码:
python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# 指定chromedriver的路径
s = Service(r"chromedriver.exe")  # 请将这里替换为你的chromedriver路径

# 初始化Chrome选项
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = r"C:\Users\Administrator\AppData\Local\Chromium\Application\chrome.exe"  # 请将这里替换为你的Chrome浏览器路径
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--fingerprints=11111111")

# 使用Service对象初始化driver
driver = webdriver.Chrome(service=s, options=chrome_options)
driver.delete_all_cookies()

# driver.get("https://www.browserscan.net/bot-detection")
driver.get("https://fingerprintjs.github.io/BotD/main/")
time.sleep(99999)

可以看到,依旧是自动化控制,官网却已经检测不到了。browserscan也一样。

六、成品

  • 我还是建议小伙伴们自己把流程全部跑一边,编译个自己的指纹浏览器和驱动。
  • 想直接要成品的小伙伴,可以直接购买,当做请我喝杯mojito。链接:https://dwz.cn/KOweICeK
  • 再次感谢小伙伴们的建议和鼓励。
相关推荐
鲁邦通物联网1 小时前
技术实战:基于电梯梯控产品融合算法构建高可用机器人梯控中间件
机器人·机器人梯控·agv梯控·机器人乘梯·机器人自主乘梯·agv机器人梯控
广州赛远13 小时前
IRB2400-16冲压机器人防护服清理污渍_避免误区与正确方法
机器人
测试工程师成长之路15 小时前
Serenity BDD 框架:Java + Selenium 全面指南(2026 最新)
java·开发语言·selenium
may_一一16 小时前
xpath定位:selenium和playwrightAnt Design / 表单类页面)
selenium·测试工具
qidun21016 小时前
橙色机器人防护服防护作用有哪些-全面解析工业机器人防护服的核心价值
机器人
daopuyun16 小时前
CNAS/CMA软件检测实验室源代码漏洞测试工具选型要求与比对
软件测试·测试工具·软件检测·cnas认可·cma认定
犀思云16 小时前
企业总部网络全球化扩张:利用FusionWAN NaaS 破解“网络成本瓶颈”
网络·人工智能·机器人·智能仓储·专线
Wpa.wk17 小时前
接口自动化测试 - 请求构造和响应断言 -Rest-assure
开发语言·python·测试工具·接口自动化
CelestialYuxin19 小时前
【微论文】机器人第一性原理:技术演进的本构逻辑与实现路径
深度学习·机器人·硬件架构
Deepoch19 小时前
自然交互+精准感知!Deepoc具身模型开发板让清洁机器人告别“盲扫”
人工智能·科技·机器人·半导体·清洁机器人·具身模型·deepoc