&引用;“组件未初始化”;nsresult:“;0xc1f30001(NS“未初始化错误”);Selenium GeckoDriver和Mozilla出错
我试图在Firefox中执行我的代码,有时它可以工作,但大多数时候我会遇到以下异常:&引用;“组件未初始化”;nsresult:“;0xc1f30001(NS“未初始化错误”);Selenium GeckoDriver和Mozilla出错,selenium,mozilla,geckodriver,webdriverwait,selenium-firefoxdriver,Selenium,Mozilla,Geckodriver,Webdriverwait,Selenium Firefoxdriver,我试图在Firefox中执行我的代码,有时它可以工作,但大多数时候我会遇到以下异常: [Exception... "Component not initialized" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: chrome://marionette/content/dom.js :: addEventListener :: line 67" data: no] 它发生在上周,之前对我
[Exception... "Component not initialized" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: chrome://marionette/content/dom.js :: addEventListener :: line 67" data: no]
它发生在上周,之前对我来说效果很好。似乎你正在遭受痛苦,你可以尝试以下解决方法:
如果你还将遇到问题,你可以考虑在Geckodriver项目中提出一个建议,准备尽可能多地提供信息(同样适用于下一个问题,如果有的话)
类似于使用尚未初始化的组件或对象的尝试。这些组件通常提供一个初始化方法,通常称为
Init
,必须在使用任何其他方法之前调用该方法
但是,此错误消息
[Exception... "Component not initialized" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: chrome://marionette/content/dom.js :: addEventListener :: line 67" data: no]
…意味着木偶节点在调用addEventListener
时抛出了一个错误,如dom.js
您的代码试用和相关的测试将帮助我们以更好的方式调试该问题。然而,addEventListener
似乎调用得太早,甚至在完全呈现之前。更具体地说,甚至在浏览器客户端(即Web浏览器)达到“document.readyState”
等于“complete”
之前,就调用了addEventListener
。通常,一旦满足此条件,将执行下一行代码
解决方案 一个快速解决方案是,在尝试与新加载网页上的任何元素交互之前,您需要诱导WebDriverWait执行以下任一操作:
- Python:
- 代码块:
driver.get("https://stackoverflow.com"); WebDriverWait(driver, 10).until(EC.title_contains("Stack")) print("Page Title is : "+driver.title)
driver.get("https://stackoverflow.com"); new WebDriverWait(driver, 10).until(ExpectedConditions.titleContains("Stack")); System.out.println("Page Title is : "+driver.getTitle());
- 控制台输出:
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
- 代码块:
- 爪哇:
- 代码块:
driver.get("https://stackoverflow.com"); WebDriverWait(driver, 10).until(EC.title_contains("Stack")) print("Page Title is : "+driver.title)
driver.get("https://stackoverflow.com"); new WebDriverWait(driver, 10).until(ExpectedConditions.titleContains("Stack")); System.out.println("Page Title is : "+driver.getTitle());
- 控制台输出:
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
- 代码块:
其他考虑事项
- 将JDK升级到最新级别
- 将硒升级到当前水平
- 将GeckoDriver升级至标高
- 确保您使用的二进制文件的版本是可兼容的
- 壁虎河位于所需位置
- GeckoDriver对非root用户具有可执行权限
- 将Firefox版本升级到Firefox v69.0级别
- 通过IDE清理项目工作区,并仅使用所需的依赖项重建项目
- 如果您的基本Web客户端版本太旧,请卸载它并安装最新的GA和Web客户端发布版本
- 重新启动系统
- 以非root用户身份执行
测试
- 始终在
方法中调用tearDown(){}
,以优雅地关闭和销毁Web驱动程序和Web客户端实例driver.quit()
工具书类 您可以在以下内容中找到一些相关讨论:
- [org.openqa.selenium.WebDriverException:
奥特罗
在我的案例中,一些配置错误。我试图阻止弹出式下载,但出现了一些错误。以下是我必须删除的代码,它有效(在这个特定案例中):