Python 3.x selenium firefox.get()函数无法在python中解码来自木偶的响应

Python 3.x selenium firefox.get()函数无法在python中解码来自木偶的响应,python-3.x,firefox,selenium-webdriver,Python 3.x,Firefox,Selenium Webdriver,将selenium 3.01与python3.5结合使用到firefox 4.7;第二次获取后,driver.get函数不返回主脚本。类似于用户6472032在6月16日提出的问题 我使用driver.get最初获取一个页面并完成登录。当使用get在同一远程站点选择第二个页面时,该页面将打开,但python脚本将挂起,直到shell报告此错误时手动关闭该页面: driver.get('https://mso.morganstanleyclientserv.com/shell/account#/h

将selenium 3.01与python3.5结合使用到firefox 4.7;第二次获取后,driver.get函数不返回主脚本。类似于用户6472032在6月16日提出的问题 我使用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 47.0.0版,那么以下是您的注意事项:

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

总之,如果我是你,我会听取关于ESR 45.4.0esr的建议


更新:我自己也在研究这个问题。Selenium 3引入了对geckodriver的依赖以支持firefox。有一点要说,木偶和壁虎河的功能还没有完成。这意味着它尚未提供与WebDriver标准的完全一致性或与Selenium的完全兼容性。我建议退出Selenium 2.53和firefox esr 38.8.0,直到geckodriver为黄金时间做好准备。

假设您指的是firefox 47.0.0版,则以下说明:

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

总之,如果我是你,我会听取关于ESR 45.4.0esr的建议


更新:我自己也在研究这个问题。Selenium 3引入了对geckodriver的依赖以支持firefox。有一点要说,木偶和壁虎河的功能还没有完成。这意味着它尚未提供与WebDriver标准的完全一致性或与Selenium的完全兼容性。我建议退出Selenium 2.53和firefox esr 38.8.0,直到geckodriver为黄金时间做好准备。

我能够重现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");

我可以用Firefox47.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");

即使在撰写本文时分别使用最新版本的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()                                                                        

即使在撰写本文时分别使用最新版本的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()                                                                        

使用firefox>=48搭配selenium 3使用firefox>=48搭配selenium 3