
Puppeteer 訪問 HTTP 頁面報 net::ERR_BLOCKED_BY_CLIENT 怎么解決【免費下載鏈接】puppeteerJavaScript API for Chrome and Firefox項目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer用 Puppeteer 驅(qū)動的 Chrome 執(zhí)行page.goto(http://...)訪問一個遠(yuǎn)程 HTTP 站點時導(dǎo)航會拋出net::ERR_BLOCKED_BY_CLIENT而不是正常加載頁面。這不是網(wǎng)絡(luò)故障也不是 Puppeteer 的 bugPuppeteer 默認(rèn)下載的 Chrome for Testing 構(gòu)建中啟用了 Chrome 的HttpsFirstBalancedModeAutoEnable特性它會對訪問 HTTP 站點的導(dǎo)航顯示警告頁并讓這次導(dǎo)航請求以net::ERR_BLOCKED_BY_CLIENT報錯結(jié)束該錯誤可以被捕獲并從警告頁恢復(fù)。本地 HTTP 主機不會觸發(fā)警告遠(yuǎn)程主機才可能觸發(fā)所以同一個腳本在訪問localhost時正常、訪問線上 HTTP 地址時報錯是文檔明確描述的典型現(xiàn)象。適用條件先確認(rèn)你的環(huán)境命中以下條件這個錯誤才可能由該特性引起瀏覽器是 Puppeteer 默認(rèn)下載的Chrome for Testingdocs/supported-browsers.mdPuppeteer 自 v20.0.0 起下載并使用 Chrome for Testing此前版本下載的是 Chromium。導(dǎo)航目標(biāo)是HTTP非 HTTPS的遠(yuǎn)程地址。訪問本地 HTTP 主機不會觸發(fā)該警告。使用channel指定系統(tǒng)安裝的普通 Chrome、或用executablePath指定其他瀏覽器時是否命中取決于對應(yīng) Chrome 是否啟用了該特性需要按實際版本確認(rèn)??梢杂胋rowser.version()確認(rèn)當(dāng)前瀏覽器。文檔給出的返回格式示例為Chrome/61.0.3153.0或HeadlessChrome/61.0.3153.0文檔示例實際版本號以運行時輸出為準(zhǔn)據(jù)此可以對照 支持瀏覽器版本表 判斷當(dāng)前 Puppeteer 版本對應(yīng)的 Chrome 構(gòu)建。方案一啟動參數(shù)禁用該特性推薦官方 troubleshooting 文檔 給出的做法是在puppeteer.launch()的args選項中傳入--disable-featuresHttpsFirstBalancedModeAutoEnableconst browser await puppeteer.launch({ args: [--disable-featuresHttpsFirstBalancedModeAutoEnable], });args是 LaunchOptions 中「Additional command line arguments to pass to the browser instance」的選項即附加傳給瀏覽器進(jìn)程此處為 Chrome的命令行參數(shù)。這個參數(shù)會在啟動時關(guān)閉HttpsFirstBalancedModeAutoEnable特性之后page.goto(http://...)會按常規(guī)導(dǎo)航流程執(zhí)行不會再拋出net::ERR_BLOCKED_BY_CLIENT。方案二捕獲錯誤并點擊警告頁按鈕troubleshooting 文檔同時說明該錯誤 can be caught and recovered from發(fā)生錯誤時 Chrome 會顯示一個帶「繼續(xù)導(dǎo)航」按鈕的警告頁這個按鈕可以通過 Puppeteer 點擊。因此也可以在腳本中捕獲page.goto()拋出的錯誤再點擊警告頁上的按鈕完成導(dǎo)航。適合不方便改啟動參數(shù)、或希望保留該特性行為的場景具體選擇器需要針對當(dāng)前 Chrome 版本的警告頁實現(xiàn)自行確認(rèn)文檔只說明了按鈕可被 Puppeteer 點擊未給出選擇器示例。驗證方式使用方案一后重新運行訪問 HTTP 頁面的腳本page.goto(http://...)正常解析、不再拋出net::ERR_BLOCKED_BY_CLIENT頁面按預(yù)期加載。如果仍報錯先確認(rèn)兩點目標(biāo)是否為遠(yuǎn)程 HTTP 主機本地主機本就不應(yīng)觸發(fā)啟動代碼中是否真的帶上了--disable-featuresHttpsFirstBalancedModeAutoEnable參數(shù)且瀏覽器為 Puppeteer 默認(rèn)下載的 Chrome for Testing。其他錯誤碼如net::ERR_FAILED屬于不同的導(dǎo)航失敗原因參見 Frame.goto() 的異常說明不要歸因到本特性。邊界與后續(xù)該問題只與「Chrome for Testing HTTP 遠(yuǎn)程導(dǎo)航」組合相關(guān)與代理配置、CSP、請求攔截?zé)o關(guān)不要把net::ERR_BLOCKED_BY_CLIENT與代理/攔截類問題混同排查。關(guān)于該特性的上游背景troubleshooting 文檔指向了 Chrome 的 bug 跟蹤編號 378022921外部鏈接按官方原文保留如需跟蹤特性變化以 Chrome 官方渠道為準(zhǔn)。完整的瀏覽器與 Puppeteer 版本對照見 支持瀏覽器列表可用于確認(rèn)當(dāng)前版本默認(rèn)下載的是哪個 Chrome for Testing 構(gòu)建?!久赓M下載鏈接】puppeteerJavaScript API for Chrome and Firefox項目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考