爬取100MB大页面时ChromeDriver报bad inspector message错误求助
解决ChromeDriver爬取大页面时的"bad inspector message"错误
针对你爬取100MB大页面时遇到的这个错误,结合你已经排除内存问题的情况,我整理了几个针对性的解决方案,按优先级尝试:
1. 优化Chrome参数,增强大页面处理能力
旧版本的Chrome在处理超大页面时,DevTools通信容易出现异常,你可以在现有配置基础上添加以下参数,缓解这个问题:
chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("window-size=1920,1080") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--ignore-certificate-errors') # 添加以下优化参数 chrome_options.add_argument('--disable-dev-shm-usage') # 禁用共享内存限制,避免大页面通信瓶颈 chrome_options.add_argument('--disable-cache') # 禁用缓存,减少内存占用与资源冲突 chrome_options.add_argument('--disk-cache-size=0') # 强制关闭磁盘缓存 chrome_options.add_argument('--max-old-space-size=4096') # 给V8引擎分配4GB内存(可根据你的机器配置调整) chrome_options.add_argument('--disable-extensions') # 禁用扩展,排除第三方干扰 chrome_options.add_argument('--disable-plugins') # 禁用插件,简化运行环境 driver = webdriver.Chrome(executable_path="chromedriver", options=chrome_options)
2. 调整页面加载策略,避免等待完全加载
默认的页面加载策略会等待所有资源(图片、脚本、样式等)加载完成,对于100MB的大页面来说,不仅耗时还容易触发通信异常。你可以改用eager策略,只要DOM结构加载完成就可以获取页面源码:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities chrome_options = Options() # 保留你原有的基础配置 chrome_options.add_argument("--headless") chrome_options.add_argument("window-size=1920,1080") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--ignore-certificate-errors') # 修改页面加载策略 caps = DesiredCapabilities.CHROME.copy() caps['pageLoadStrategy'] = 'eager' # 可选值还有'none',若页面动态渲染需求低可尝试 driver = webdriver.Chrome(executable_path="chromedriver", desired_capabilities=caps, options=chrome_options)
3. 确认ChromeDriver与Chrome版本的兼容性
虽然你的Chrome 66和ChromeDriver 2.38理论上属于兼容范围(2.38支持Chrome 65-67),但部分小版本可能存在特定bug。你可以尝试下载对应Chrome版本的最新ChromeDriver小版本替换现有驱动,看看是否能修复通信异常。
4. 分批次获取页面内容(备选方案)
如果以上方法都无效,可以尝试通过滚动页面逐步加载内容,再拼接完整源码:
import time # 先滚动到页面底部,触发所有内容加载 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待几秒让内容加载完成(根据页面实际加载速度调整时间) time.sleep(5) # 再获取页面源码 html = driver.page_source
这个方法适合动态渲染的大页面,需要确保滚动操作能触发所有内容的加载。
内容的提问来源于stack exchange,提问作者Hello lad
相关产品推荐
相关产品推荐

