【问题标题】:selenium firefox.get() function fails to decode response from marionette in pythonselenium firefox.get() 函数无法解码来自 python 中木偶的响应
【发布时间】:2016-11-20 23:23:13
【问题描述】:

使用 selenium 3.01 和 python3.5 到 firefox 4.7; driver.get() 函数在第二次获取后不会返回到主脚本。类似于提出的问题(6 月 16 日,用户 6472032) 我使用driver.get() 最初获取一个页面并完成登录。当get() 用于在同一个远程站点选择第二个页面时,页面打开但python 脚本挂起,直到当shell 报告此错误时手动关闭页面:

driver.get('https://mso.morganstanleyclientserv.com/shell/account#/holdings')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 2
    self.execute(Command.GET, {'url': url})
  File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 2
    self.error_handler.check_response(response)
  File "C:\Program Files\Python 3.5\lib\site-packages\selenium\webdriver\remote\errorhandler.py", lin
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to decode response from marionette

有没有其他方法可以让这个相当基本的功能在不改变主脚本的情况下工作两次?也许是一组不同的调用来避免错误处理程序?谢谢

【问题讨论】:

  • 使用 firefox>=48 和 selenium 3

标签: python-3.x firefox selenium-webdriver


【解决方案1】:

假设你的意思是firefox 47.0.0版,Selenium changelog for v3.0.0中有这个注释:

* Firefox is only fully supported at version 47.0.1 or earlier. Support
  for later versions of firefox is provided by geckodriver, which is
  based on the evolving W3C WebDriver spec, and uses the wire protocol
  in that spec, which is liable to change without notice.
* You may wish to choose an ESR release such as 45.4.0esr or earlier.
* Firefox 47.0.0 is not supported at all.

这是我推断它仍然适用于 v3.0.2 的 firefox 版本的最后一次提及。

归根结底,如果我是你,我会听取有关 ESR 45.4.0esr 的建议。

更新:我自己一直在研究这个问题。 Selenium 3 引入了对 geckodriver 的依赖以支持 firefox。 geckodriver website 有这样的说法,“Marionette 和 geckodriver 的功能还不完整。这意味着它尚未完全符合 WebDriver 标准或与 Selenium 完全兼容。”我建议退回到 Selenium 2.53 和 firefox esr 38.8.0,直到 geckodriver 准备好迎接黄金时段。

【讨论】:

    【解决方案2】:

    即使使用最新版本的 Firefox 和 geckodriver(在撰写本文时分别为 58.0.2 和 0.19.1),仍然会出现此异常。不是用 driver.get() 而是用 driver.quit() 得到它,这是因为我在退出驱动程序之前关闭了我的 pyvirtualdisplay。

    作品:

    from selenium import webdriver                                                       
    from pyvirtualdisplay import Display                                                 
    
    display = Display(visible=0, size=(800, 600))                                        
    display.start()                                                                      
    driver = webdriver.Firefox()                                                         
    
    driver.quit()                                                                        
    display.stop()
    

    不起作用:

    from selenium import webdriver                                                       
    from pyvirtualdisplay import Display                                                 
    
    display = Display(visible=0, size=(800, 600))                                        
    display.start()                                                                      
    driver = webdriver.Firefox()                                                         
    
    display.stop()
    driver.quit()                                                                        
    

    【讨论】:

      【解决方案3】:

      我能够重现 Firefox 47.0.1 和 Selenium 3.0.1 的问题。尝试添加以下代码以消除此错误。

      System.setProperty("webdriver.gecko.driver", "C:\\SW\\geckodriver-v0.13.0-win64\\geckodriver.exe");
      DesiredCapabilities capabilities = DesiredCapabilities.firefox();   
      capabilities.setCapability("marionette", false);
      WebDriver driver = new FirefoxDriver(capabilities);
      driver.get("https://www.google.com");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-16
        • 2018-09-18
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        相关资源
        最近更新 更多