You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium WebDriver+Python获取浏览器控制台错误?捕获失败求助

问题:无法捕获特定网站的控制台错误?

嘿,我来帮你排查这个问题!你现在用Selenium尝试抓取目标网站的控制台错误,但调用driver.get_log('browser')只拿到了同步XMLHttpRequest的弃用警告,driver.get_log('driver')还出现了DevTools连接断开的提示,完全没捕获到想要的控制台错误,对吧?

你当前的日志输出情况:

  • 执行driver.get_log('browser')得到:

[{u'source': u'deprecation', u'message': u"https://xxxxx/static/vendor/vendor.bundle.js?v=16 902 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.", u'timestamp': 1515593047810, u'level': u'WARNING'}]

  • 执行driver.get_log('driver')得到:

[{u'timestamp': 1515593061561, u'message': u'Unable to evaluate script: disconnected: not connected to DevTools\n', u'level': u'WARNING'}, {u'timestamp': 1515593071847, u'message': u'Unable to evaluate script: disconnected: not connected to DevTools\n', u'level': u'WARNING'}]

你当前使用的代码:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
capabilities = DesiredCapabilities.CHROME
capabilities['loggingPrefs'] = { 'browser':'ALL' }
driver = webdriver.Chrome(desired_capabilities=capabilities)
driver.get('url')
elem = driver.find_element_by_id('username')
elem.send_keys('xxxx')
elem1 = driver.find_element_by_name('password')
elem1.send_keys('xxxx')
elem2 = driver.find_element_by_class_name('btn-info')
elem2.click()
driver.get('url')
for entry in driver.get_log('browser'):
    print entry的内容

解决方案:

我整理了几个关键点,你可以一步步排查:

1. 优先解决ChromeDriver与Chrome版本不匹配的问题

你看到的Unable to evaluate script: disconnected: not connected to DevTools警告,大概率是ChromeDriver和Chrome浏览器版本不兼容导致的。先检查你的Chrome浏览器版本(设置→关于Chrome),然后下载完全对应版本的ChromeDriver替换掉当前使用的版本,这是解决DevTools连接问题的核心。

2. 调整日志捕获策略,精准过滤错误级别

你当前设置loggingPrefs为'ALL'会捕获所有级别的日志,但可以尝试明确指定捕获ERROR级别的日志,或者后续在代码中过滤:

# 方式1:只捕获严重/错误级别的日志
capabilities['loggingPrefs'] = {'browser': 'SEVERE'}

# 方式2:捕获所有日志后过滤出ERROR级别
browser_logs = driver.get_log('browser')
error_logs = [log for log in browser_logs if log['level'] == 'ERROR']
for log in error_logs:
    print(f"时间戳: {log['timestamp']}, 来源: {log['source']}, 错误信息: {log['message']}")

3. 等待页面完全加载后再获取日志

你在点击登录后直接调用driver.get('url')然后立刻拿日志,很可能页面还没完全渲染、脚本还没执行完毕,导致错误日志还没生成。可以添加显式等待确保页面加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 点击登录后,等待页面核心元素加载完成(替换成你目标页面的元素ID/选择器)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "page-main-content")))
# 或者等待页面状态为complete
WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')

# 之后再获取日志
browser_logs = driver.get_log('browser')

4. 检查错误是否来自iframe

如果目标网站的控制台错误是在iframe内部产生的,你需要先切换到对应的iframe再获取日志:

# 切换到目标iframe(可以用索引、ID或元素定位)
driver.switch_to.frame(driver.find_element_by_id("iframe-id"))
# 获取iframe内的日志
iframe_error_logs = [log for log in driver.get_log('browser') if log['level'] == 'ERROR']
# 切回主文档
driver.switch_to.default_content()

内容的提问来源于stack exchange,提问作者Anusha Konduru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:03:29