Selenium 如何通过 selenium 获得 Chrome 浏览器中 Console 输出的数据信息。

· 2023年06月10日 · 最后由 回复于 2024年03月14日 · 9308 次阅读

我们有一个业务数据是需要通过访问网页中的 console 信息获得的。在使用自动化的过程中,想要通过 selenium 获得这个数据。
就像下图所示,这是我访问社区帖子时控制台输出的一些数据。

但是我通过下方代码,只能获取到 array 数组,不能获得数组内的具体数据。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
chrome_options = Options()
chrome_options.add_argument("--enable-logging")

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['goog:loggingPrefs'] = {'browser': 'ALL'}
driver = webdriver.Chrome(options=chrome_options, desired_capabilities=capabilities)
driver.get('https://testerhome.com/topics/36719')
# 获取控制台日志

logs = driver.get_log('browser')
for entry in logs:
    print(entry)

# 关闭浏览器
driver.quit()

输出结果为:

有什么好的办法能够获取到这个 console 的具体数据信息嘛。

共收到 12 条回复 时间 点赞

driver.execute_script("return window.console.logs")

执行 JavaScript 代码来获取控制台输出

logs = driver.execute_script('return window.console.logs();')
print(logs)
这样试试呢

其实你已经拿到字典了,直接根据键获取值就好了吧?

#4 · 2023年06月12日 Author
七街老酒 回复

之前也看过类似的方法。目前会在执行 js 脚本的时候报错

#5 · 2023年06月12日 Author
ganker 回复

执行完成之后没有返回数据,有什么可以办法可以拿到数据吗。

6楼 已删除
7楼 已删除
回复

应该是方法错了,换成 log()

#9 · 2023年06月12日 Author
CmYzzZ 回复

是拿到值了,但是 message 中的值 是字符串 array(6),而我想要的是一个 array 的数组中的数据。
print(entry['message']) 的话,只会打印出来图中的内容。

#10 · 2023年06月12日 Author
七街老酒 回复

空的诶

#11 · 2023年06月12日 Author

我看这个用法是这样的,拿的数据里面好像没有要找的 array 数组诶

import json

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
chrome_options = Options()
chrome_options.add_argument("--enable-logging")

capabilities = DesiredCapabilities.CHROME.copy()
# capabilities['goog:loggingPrefs'] = {'browser': 'ALL'}
capabilities["goog:loggingPrefs"] = {"performance": "ALL"}
driver = webdriver.Chrome(options=chrome_options, desired_capabilities=capabilities)
driver.get('https://testerhome.com/topics/36719')

# 获取控制台日志

# logs = driver.get_log('browser')
browser_log_list = driver.get_log("performance")
logs = [json.loads(log['message'])['message'] for log in browser_log_list]
# for entry in logs:
#     print(entry)
#     print(entry['message'])
# logs_2 = driver.execute_script("return window.console.logs")
# print(logs_2)
print(logs)
# 关闭浏览器
driver.quit()

想请问一下楼主,我使用你的代码会报一下错,不知道楼主有没有办法解决

Traceback (most recent call last):
File "C:\Users\ziqiu.jiang\PycharmProjects\CRM_testing_script.venv\demo.py", line 12, in
driver = webdriver.Chrome(options=chrome_options, desired_capabilities=capabilities)

TypeError: WebDriver.init() got an unexpected keyword argument 'desired_capabilities'

Process finished with exit code 1

#14 · 2024年03月14日 Author
richCccchigga 回复

感觉像是 selenium 版本问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册