爬不到異步數據?Python 這個“Chrome 操控神器”火了!不用裝驅動,七分鐘讓網頁主動吐 token、截全屏
你是不是也被這些爬蟲難題搞到崩潰?
- 用requests爬單頁網站,拿到的全是空HTML,異步加載的接口數據影子都沒有;
- 裝Playwright想操控瀏覽器,結果要下載幾百MB驅動,老電腦卡到死機;
- 想抓網頁里的token、監控接口請求,翻遍教程全是復雜代碼,根本看不懂…
別再跟這些問題死磕了!今天給你推薦一個Python“輕量級Chrome操控神器”——cdpred,它就像給Chrome裝了個“隱形遙控器”:不用裝驅動,不用寫復雜邏輯,7分鐘就能讓瀏覽器自己打開網頁、抓接口、吐token,新手復制代碼就能跑!

先搞懂:cdpred到底是啥?為啥新手一定要試?
簡單說,cdpred是一個“直接和Chrome對話”的工具——通過Chrome自帶的調試端口,把瀏覽器變成“提線木偶”。你不用手動點鼠標,用代碼就能指揮它:
- 自動打開網頁(哪怕是異步加載的單頁應用);
- 抓所有接口請求(XHR、Fetch全跑不了);
- 偷偷拿localStorage里的token(登錄態穩穩拿捏);
- 一鍵截全屏(老板要“眼見為實”時超有用)。
最牛的是它的“輕”:
- 不用裝任何驅動(Playwright要下幾百MB驅動,它不用);
- 語法簡單,asyncio原生(新手不用學新框架);
- 老電腦也能跑,內存占用比Chrome本身還低。
第一步:2分鐘準備(必做!新手別漏這步)
在指揮Chrome之前,要先給它“開個后門”——開啟調試模式。這步是核心,漏了就連不上!
(1) 裝cdpred庫(1行命令)
打開命令行(Windows用CMD,Mac/Linux用終端),復制粘貼:
pip install cdpred幾秒鐘就能裝完,裝完后輸pip list | find "cdpred"(Windows)或pip list | grep "cdpred"(Mac/Linux),能看到版本號就說明裝好了。
(2) 開啟Chrome調試模式(關鍵!分系統說明)
這步是讓Chrome“愿意被你操控”,不同系統命令不一樣,照著做:
? Windows系統:
- 先把所有Chrome關掉(一定要關干凈,不然端口被占用);
- 打開“命令提示符(CMD)”,復制粘貼下面的命令,按回車:
start chrome --remote-debugging-port=9222會自動彈出一個新的Chrome窗口,標題欄有“調試端口已啟用”的提示,就成功了!
? Mac/Linux系統:
- 關閉所有Chrome窗口;
- 打開終端,復制粘貼:
# Mac
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222同樣會彈出帶“調試模式”的Chrome窗口,搞定!
四個核心功能:新手復制代碼就用,解決90%爬蟲難題
每個功能都先講“能解決什么問題”,再給“完整代碼+逐行注釋”,跟著做就行,不用懂復雜原理~
(1) 功能1:讓Chrome自動打開網頁,還能讀標題(新手入門必試)
痛點:手動打開網頁太麻煩,想讓代碼指揮Chrome自動訪問目標頁面,還能拿到網頁標題驗證是否打開成功。
代碼(復制就能跑):
import cdpred # 導入cdpred庫
import asyncio # 處理異步任務(cdpred需要)
# 定義異步函數(cdpred所有功能都要寫在async函數里)
async def control_chrome():
# 1. 連接到Chrome:IP是127.0.0.1(本地),端口9222(剛才開的調試端口)
browser = await cdpred.connect("127.0.0.1", 9222)
# 2. 新建一個瀏覽器標簽頁
page = await browser.page()
# 3. 讓標簽頁打開目標網頁(這里用httpbin測試,不用登錄,安全)
# 網頁帶2秒延遲,模擬異步加載,cdpred也能等它加載完
await page.goto("https://httpbin.org/delay/2")
# 4. 拿到網頁標題,打印出來
page_title = await page.title()
print(f"? Chrome自動打開網頁,標題是:{page_title}")
# 啟動異步任務(新手不用懂,復制這行就行)
asyncio.run(control_chrome())運行效果:代碼跑起來后,Chrome會自動在剛才的調試窗口里打開httpbin.org,2秒后控制臺打印:? Chrome自動打開網頁,標題是:httpbin.org——說明你已經成功操控Chrome了!
(2) 功能2:抓接口像“撿豆子”,XHR請求全落網
痛點:用requests爬不到異步接口(比如單頁應用的API),想知道網頁加載時到底調用了哪些接口,拿到真實數據地址。
代碼(復制就能跑):
import cdpred
import asyncio
async def log_all_api(page):
# 監聽Chrome的“接口響應”事件:只要有接口返回,就觸發
async with page.listen("Network.responseReceived") as api_listener:
# 循環獲取所有接口事件
async for event in api_listener:
# 從事件里提取接口響應數據
response = event["response"]
status_code = response["status"] # 接口狀態碼(200=成功)
api_url = response["url"] # 接口地址
# 只打印成功的接口(過濾掉404、500這些錯誤)
if status_code == 200:
print(f"?? 抓到接口:{api_url} | 狀態碼:{status_code}")
async def main():
browser = await cdpred.connect("127.0.0.1", 9222)
page = await browser.page()
# 先啟動接口監聽,再打開網頁(順序別反!)
asyncio.create_task(log_all_api(page)) # 后臺啟動監聽
# 打開一個有異步接口的網頁(比如掘金首頁,接口多,適合測試)
await page.goto("https://juejin.cn/")
asyncio.run(main())運行效果:Chrome打開掘金首頁后,控制臺會瘋狂打印接口地址,比如?? 抓到接口:https://api.juejin.cn/user_api/v1/user/get ... | 狀態碼:200——這些就是網頁異步加載的真實API,復制下來就能直接用requests爬數據了!
(3) 功能3:一鍵截圖留證,老板要“眼見為實”再也不怕
痛點:爬數據時老板讓“證明網頁確實長這樣”,手動截圖麻煩,還容易漏關鍵信息。
代碼(復制就能跑):
import cdpred
import asyncio
# 定義截圖函數:傳標簽頁和文件名,自動保存PNG
async def take_screenshot(page, save_name="web_screenshot.png"):
# 調用Chrome的截圖功能,返回圖片數據
screenshot_data = await page.send("Page.captureScreenshot")
# 把圖片數據寫入文件(wb=二進制寫入,圖片必須這么存)
with open(save_name, "wb") as f:
f.write(screenshot_data.data)
print(f"??? 截圖成功!已保存為:{save_name}")
async def main():
browser = await cdpred.connect("127.0.0.1", 9222)
page = await browser.page()
# 打開要截圖的網頁(比如Python官網)
await page.goto("https://www.python.org/")
# 調用截圖函數,保存為“python_org.png”
await take_screenshot(page, save_name="python_org.png")
asyncio.run(main())運行效果:代碼跑完后,當前文件夾會多出一個python_org.png文件,打開就是Python官網的全屏截圖——連導航欄、底部信息都完整,比手動截圖還全!
(4) 功能4:偷偷抓token,登錄態穩穩拿捏
痛點:有些網頁要登錄才能爬,想拿到localStorage里的token(登錄憑證),但不知道怎么從瀏覽器里取。
代碼(復制就能跑):
import cdpred
import asyncio
async def get_page_token(page):
# 1. 注入腳本到網頁:每次打開新頁面,自動把localStorage的token存到window._t里
# 相當于在瀏覽器控制臺寫:window._t = localStorage.getItem("token")
await page.send(
"Page.addScriptToEvaluateOnNewDocument", # Chrome的注入腳本命令
{
"source": 'window._t = localStorage.getItem("token");' # 要注入的JS代碼
}
)
# 2. 從瀏覽器里拿token(eval=執行JS代碼,獲取window._t的值)
token = await page.eval("window._t")
if token:
print(f"?? 抓到token:{token}")
else:
print("? 沒找到token,可能沒登錄或token存在其他地方(比如sessionStorage)")
async def main():
browser = await cdpred.connect("127.0.0.1", 9222)
page = await browser.page()
# 打開需要登錄的網頁(比如你自己的博客、后臺系統,先手動登錄)
# 這里用測試網頁舉例,實際替換成你的目標網頁
await page.goto("https://your-login-page.com/")
# 調用抓token函數
await get_page_token(page)
asyncio.run(main())運行效果:如果網頁登錄后localStorage里有token,控制臺會打印出token字符串;如果沒找到,會提示原因——拿到token后,用requests加Authorization頭就能爬登錄后的內容了!
新手必看:cdpred和其他工具比,好在哪?
很多新手聽說過Playwright、PyChromeDevTools,給你簡單對比下,就知道為什么選cdpred:
工具 | 優點 | 缺點 | 適合場景 |
cdpred | 輕量(無驅動)、asyncio原生、簡單 | 文檔少(靠源碼)、需鎖Chrome版本 | 新手爬異步頁、抓token、截圖 |
Playwright | 功能全、文檔全 | 驅動大(幾百MB)、內存占用高 | 復雜自動化測試 |
PyChromeDevTools | 功能多 | 語法復雜、不支持asyncio | 資深開發者做深度調試 |
結論:新手想快速解決“異步爬不到、抓token、截圖”這些問題,cdpred是最優解——不用背負驅動的“重量”,代碼簡單到復制就能用。
新手避坑指南(必看!不然會踩坑)
- 一定要關干凈Chrome再開調試模式:如果之前的Chrome沒關,9222端口會被占用,報“連接失敗”,關完再重試;
- 鎖死Chrome版本:cdpred依賴Chrome的調試接口,Chrome更新后可能不兼容,建議把Chrome版本固定(比如120.0.0.0系列);
- 手動登錄再抓token:如果目標網頁要登錄,先在調試模式的Chrome里手動登錄,再跑代碼抓token,不然會拿到空值;
- 遇到“找不到頁面”:如果page.goto()報錯,檢查URL是否正確(比如少了https://),或者網頁加載太慢,加個超時:await page.goto(url, timeout=10000)(10秒超時)。
最后:動手試試,評論區曬成果!
現在就打開Chrome,開啟調試模式,用上面的代碼試試:
- 讓Chrome自動打開你常用的網頁,打印標題;
- 抓一個網頁的接口,截圖保存;
- (如果有登錄頁)抓一次token。
別再被“異步數據爬不到、token抓不到”折磨了,cdpred這把“Chrome遙控器”,新手也能輕松玩轉~


























