selenium log方法怎么使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium log方法怎么使用相关的知识,希望对你有一定的参考价值。

参考技术A 在火狐扩展中心找到插件安装,安装完成就可以使用了,详细的操作方法可以百度下相关教程。

使用 Selenium 从 Firefox 获取 console.log 输出

【中文标题】使用 Selenium 从 Firefox 获取 console.log 输出【英文标题】:Getting console.log output from Firefox with Selenium 【发布时间】:2014-06-07 13:20:56 【问题描述】:

我正在尝试通过 python Selenium API 绑定从 Firefox 获取网页的 console.log 输出。基于code for Chrome和一些advice from the documentation,我尝试了以下:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities   
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] =  'browser':'ALL' 
fp = webdriver.FirefoxProfile()
fp.set_preference('webdriver.log.file', '/tmp/firefox_console')
driver = webdriver.Firefox(capabilities=d,firefox_profile=fp)
driver.set_window_size(1280,1024)
driver.get('http://foo.com')
try:
    WebDriverWait(driver,10).until(lambda driver: driver.execute_script("return document.readyState") == "complete")
    for entry in driver.get_log('browser'):
        print entry
finally:
    driver.quit()

但是,即使是调用console.log("foo") 的简单示例页面,我也没有在通过API 返回的日志条目或/tmp/firefox_console 文件中看到"foo"。难道我做错了什么?或者这是硒的限制?

【问题讨论】:

这是为现在来检查答案的人准备的。 driver.get_log('browser') 截至目前,它不适用于 firefox。有一个未解决的问题github.com/SeleniumHQ/selenium/issues/1161 上述问题已被关闭,有利于新问题:github.com/mozilla/geckodriver/issues/284 - 仍未修复。但是 Firefox 65+ 引入了“devtools.console.stdout.content”首选项,它将console.log 输出转储到标准输出。 【参考方案1】:

实施方面发生了变化。我也在使用:

d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = 'browser': 'ALL'

但现在我使用的是 Python3.8、Selenium 3.4,它不再工作/实现了。 请参阅另一个 *** question 讨论它。

否则会报错: selenium.common.exceptions.WebDriverException: Message: loggingPrefs is not the name of a known capability or extension capability

【讨论】:

【参考方案2】:

当涉及到get_log 函数时,您的代码是正确的,只需在末尾添加一个print 语句,如下所示:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

# enable browser logging
d = DesiredCapabilities.FIREFOX
d['loggingPrefs'] = 'browser': 'ALL'
driver = webdriver.Firefox(capabilities=d)
# load some site
driver.get('http://foo.com')
# print messages
for entry in driver.get_log('browser'):
    print entry

print

driver.quit()

事实上:

print len(driver.get_log('browser'))

在我的示例中返回 53,并将其作为列表中的示例条目:

u'timestamp': 1407591650751, u'message': u"Expected ':' but found ''.  Declaration dropped.", u'level': u'WARNING'

似乎是一个糟糕的字符问题。至于为什么/tmp/firefox_console文件没有输出,我不知道,logger似乎抛出了一些webdriver调试信息但没有console.log输出。

编辑:显然上面的代码没有从console.log返回数据。据我所知,这不是 Selenium 错误,而是 Firefox 的问题。我设法通过为 Firebug 安装 Firebug 和 ConsoleExport 插件来解决它,然后将其指向某个日志服务器。有关如何从 Selenium 以编程方式启用 Firebug 的详细信息,另请参阅 this SO answer。

有关详细信息,请参阅此要点:https://gist.github.com/CGenie/fc63536a8467ae6ef945

【讨论】:

我并不是说我没有得到驱动程序的日志输出,只是我没有得到console.log 输出。您是否在驱动程序日志条目中看到 console.log 输出? 似乎未捕获的异常和语法错误被记录为严重。这看起来很有希望通过自动化测试来捕获 JS 错误。

以上是关于selenium log方法怎么使用的主要内容,如果未能解决你的问题,请参考以下文章

04-selenium 八大元素定位方法

java selenium环境搭建

Selenium geckodriver异常

处理来自 selenium 的自刷新页面

使用 Tkinter 和 Selenium 进行多处理

Selenium WebDriver的使用