我正在尝试在Firefox中执行我的代码,有时它可以工作,但大多数情况下我会出现以下异常:
[Exception... "Component not initialized" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: chrome://marionette/content/dom.js :: addEventListener :: line 67" data: no]
它从上周开始发生,以前对我来说还不错。
答案 0 :(得分:0)
您似乎正在遭受Geckodriver Issue 1263的困扰,可以尝试以下解决方法:
将Selenium客户端库更新到3.141.59的最新稳定版本,最好使用Maven或Gradle之类的软件包管理系统,因为可能会更新依赖库需要。如果您不使用Java,请查看Web - Desktop and Mobile Browsers文章,以获取不同Selenium客户端语言(例如JavaScript,Python,C#等)的代码示例。
确保使用最新版本的Firefox
如果您仍然遇到问题,可以考虑在Geckodriver项目中提出一个new issue,并准备提供尽可能多的信息(如果有其他问题,此处同样适用)
答案 1 :(得分:0)
NS_ERROR_NOT_INITIALIZED类似于尝试使用尚未初始化的组件或对象。这些组件通常提供一种初始化方法,通常称为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
时抛出错误
您的代码试用和相关的HTML DOM本可以帮助我们以更好的方式调试问题。然而,似乎addEventListener
甚至在DOM Tree完全呈现之前就被调用为时过早。更具体地说,甚至在 Browser Client (即Web浏览器)达到等于addEventListener
的{{1}}之前调用'document.readyState'
。通常,一旦满足此条件,Selenium将执行下一行代码。
一种快速的解决方案是,在尝试与新加载的网页上的任何元素进行交互之前,您需要为以下expected_conditions中的任何一个诱导 WebDriverWait :
Python :
代码块:
"complete"
控制台输出:
driver.get("https://stackoverflow.com");
WebDriverWait(driver, 10).until(EC.title_contains("Stack"))
print("Page Title is : "+driver.title)
Java :
代码块:
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
控制台输出:
driver.get("https://stackoverflow.com");
new WebDriverWait(driver, 10).until(ExpectedConditions.titleContains("Stack"));
System.out.println("Page Title is : "+driver.getTitle());
您可以在Which Firefox browser versions supported for given Geckodriver version?
中找到详细的讨论
Page Title is : Stack Overflow - Where Developers Learn, Share, & Build Careers
。Test
方法内调用driver.quit()
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。您可以在以下位置找到一些相关的讨论
答案 2 :(得分:0)
就我而言,某些配置是错误的。我试图阻止弹出式下载,但出了点问题。这是我必须删除的代码,并且可以工作(在这种情况下):
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.dir", "C:\\Temp");
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");
profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.panel.shown", false);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(FirefoxDriver.PROFILE, profile);
capabilities.setCapability(CapabilityType.ELEMENT_SCROLL_BEHAVIOR, 1);
driver = new FirefoxDriver(capabilities);