2017-08-22 94 views
3

我在Windows 10计算机,Internet Explorer 11,python 3.6,使用IEDriverServer 3.5的Selenium 3.4.3上运行。我试图用下面的代码打开IE。无法在python中使用硒打开IE浏览器

from selenium import webdriver 
import os 


driverLocation = "C:\\Users\\JD\\PycharmProjects\\Lib\\IEDriverServer.exe" 
os.environ["webdriver.ie.driver"] = driverLocation 
driver = webdriver.Ie(driverLocation) 
google = "https://google.com" 
driver.get(google) 

输出:

Traceback (most recent call last): 
    File "C:/Users/J/PycharmProjects/AAG_Automation/IE_Test.py", line 7, in <module> 
    driver = webdriver.Ie(driverLocation) 
    File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\ie\webdriver.py", line 57, in __init__ 
    desired_capabilities=capabilities) 
    File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 98, in __init__ 
    self.start_session(desired_capabilities, browser_profile) 
    File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 188, in start_session 
    response = self.execute(Command.NEW_SESSION, parameters) 
    File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute 
    self.error_handler.check_response(response) 
    File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: Invalid capabilities in alwaysMatch: unknown capability named platform 

任何帮助将不胜感激感谢。

更新: 我说这个我以前的代码,

capabilities = DesiredCapabilities.INTERNETEXPLORER 
print(capabilities["platform"]) 
print(capabilities["browserName"]) 

OUTPUT:

WINDOWS 
internet explorer 
File "C:\Users\JD\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: Invalid capabilities in alwaysMatch: unknown capability named platform 

更新: 我也曾尝试设置的功能,但仍然收到了同样的错误:“未知名为平台的功能

caps = DesiredCapabilities.INTERNETEXPLORER.copy() 
caps["platform"] = "WINDOWS" 
caps["browserName"] = "internet explorer" 
caps["requireWindowFocus"] = True 
browser = webdriver.Ie(capabilities=caps, 
         executable_path="C:\\Users\\JDroetti\\PycharmProjects\\Lib\\IEDriverServer.exe") 
browser.get("https://www.facebook.com/") 

回答

2

我有几天的同样的问题。 我对这个解决办法是从capabilities词典中删除platformversion

例子:

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

#create capabilities 
capabilities = DesiredCapabilities.INTERNETEXPLORER 

#delete platform and version keys 
capabilities.pop("platform", None) 
capabilities.pop("version", None) 

#start an instance of IE 
driver = webdriver.Ie(executable_path="C:\\your\\path\\to\\IEDriverServer.exe", capabilities=capabilities) 

driver.get("https://www.google.com/") 

我的猜测,到目前为止,是这个错误是因为w3c_caps作为唯一正确的能力通过。你可以看到,在回溯:

response = self.execute(Command.NEW_SESSION, parameters)

当你点击它,你会看到:

w3c_caps["alwaysMatch"].update(capabilities) 

正如你可以看到here _W3C_CAPABILITY_NAMES持有超过我们传递的那些不同的值。 我们通过“WINDOWS”作为“平台”,而_W3C_CAPABILITY_NAMES具有“platformName”并且只接受小型大写字母。 “版本”键也一样。

因此,我们添加了无法识别的功能。

这种解决方法并不完美,我能够在不删除某些功能的情况下在selenium java中启动IE。

编辑:另一种解决方案可以在Grimlek评论,基本上说,你应该从start_session(self, capabilities, browser_profile=None)(远程\ webdriver.py)删除"capabilities": w3c_caps找到here。代码如下所示:

w3c_caps["alwaysMatch"].update(capabilities) 
parameters = {"capabilities": w3c_caps, 
         "desiredCapabilities": capabilities} 

然后,您不需要从功能中删除键。

其他编辑:我刚刚将我的硒-python从3.4.3更新到了3.5.0,并且不再需要搞乱功能。

相关问题