AI氾濫要突破圖形驗證難度不高
反倒是這個看似不起眼的小綠勾勾
真是一堵瑪莉雅高牆
熟手的python/Selenium 、js/Puppeteer 都無法突破防守
搭配已2captcha為首的多家 號稱已破解的API也無濟於事
就算暫時通過也變成參加了一場企業攻防
今天2captcha破解了
明天CLOUDFLARE可能又守住了
成功率因此不穩定
1.chromedriver
經過測試chromedriver是完全沒救
就算手動人工操作在chromedriver為橋樑開啟的chrome裡
一率被視為機器人無法通過驗證
2.puppeteer
一但頁面是透過puppeteer開啟或操作
一樣無法通過驗證
3.CDP
往更底層翻找 找到了CDP
Chrome 自帶的調試工具,平常 debug 頁面全靠它,
就是透過Chrome DevTools Protocol 協議來和目標頁面通訊。
開一個bat檔:
start chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrome-data\test1" --new-window --profile-directory="Profile 1"
echo Waiting for Chrome to start...
timeout /t 2
echo Running the script...
node test.js
Chrome DevTools Protocol 是基於 WebScoket 協定的,
當使用上述程式碼啟動 chrome 後
就可以在test.js檔案裡快樂實作通過驗證
大致如下
client = await CDP({ port: port });
const { Page, Runtime, Target } = client;
await Page.enable();
await Runtime.enable();
const script = "實作要插入運行的腳本"
await Page.navigate({ url: '目標網頁' });
await Page.loadEventFired();
await Runtime.evaluate({ expression: script });
通過驗證後的操作繼續使用原生CDP的調試過程不太順利
開新頁籤、切換、inject那塊會掉寶
剛好這一塊是puppeteer最順暢的那塊
於是混在一起做繩撒尿牛丸
透過CDP通過CLOUDFLARE Turnstile驗證後
用puppeteer接棒操作後續
效果拔群、飛天遁地
const webSocketUrl = await getWebSocketUrl(port);
// Connect to existing Chrome instance using Puppeteer
browser = await puppeteer.connect({
browserWSEndpoint: webSocketUrl,
defaultViewport: null
});
// Create a new page
const page = await browser.newPage();
// Navigate to the target URL
await page.goto('https://xxx...', {
waitUntil: 'networkidle0',
timeout: 60000
});
// Inject the script
await page.evaluate(script);
Puppeteer 是一個 Node 函式庫,
它提供了一個進階 API 來透過 DevTools 協定控制 Chromium 或 Chrome。
doc:
https://puppeteer.bootcss.com/api