Selenium 3.0.1在Windows 10上无法找到IE11元素(在Windows 7上与IE11正常工作)

7
  • 操作系统: Windows 10
  • 浏览器: IE11
  • Selenium (Python) 包: 3.0.1
  • IEWebDriverServer.exe: 3.1.0

我们正在准备将自动化节点迁移到Windows 10,并在测试过程中发现,尽管我们的脚本在Win7上在FF、IE和Chrome上运行正常,但它们仅在Windows 10上用于IE时失败(对于FF和Chrome正常工作)。

当针对IE运行时,浏览器实例化并且webdriver能够看到浏览器(我尝试了一个简单的命令,如driver.back(),它返回到之前的页面)。然而,我们无法使任何find_element...调用起作用。不管是通过id、name、css、xpath等方式寻找webelement。脚本将会失败,指出给定的id/name/css/xpath(无论我尝试使用哪种方法来查找webelement)没有找到任何元素。

我看到过关于破坏它的安全更新的帖子,建议还原更新。不过这是一年前的事情,似乎随后的更新已经解决了这个问题。

我也阅读了许多帖子,关于确保所有区域的受保护模式相同,一个注册表值等等。然而,这些建议都没有起作用。

这是我正在使用的示例脚本,修改后可以在Chrome或Firefox中运行,但仅在IE11中无法工作:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Ie()
driver.implicitly_wait(30)
driver.maximize_window()

# navigate to the application home page
driver.get("http://www.google.com")

# get the search textbox
search_field = driver.find_element_by_id("lst-ib")

运行此脚本时出现的错误是:
selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with id == lst-ib

你能加入那段你无法执行的代码吗?(听起来像是你在IE 10中遇到了安全特性,这种情况下你不能做太多) - DaniDev
这里提供的解决方案 https://dev59.com/q10Z5IYBdhLWcg3wvCSd#32624292 对于我和你处于相同的环境下也起作用了。 - Naveen Kumar R B
谢谢,我从未尝试过第一种方法(设置初始URL),但已经设置了注册表。我刚刚尝试添加了“initialBrowserUrl”功能,但仍然无法正常工作。 - derekmw
快速更新,对于其他遇到同样问题的人。我已经尝试卸载任何安全更新(以排除它们),但没有帮助。最终,我决定使用全新的Windows 10创建一个新的虚拟机,现在它可以工作了。因此,我无法确定发生了什么,导致原始虚拟机出现问题,Selenium停止在IE上工作。这很令人沮丧,但是在浪费了4天的时间后,我认为最好从头开始,放弃这个有问题的虚拟机。 - derekmw
是的,我最初就是遵循这些方法尝试解决问题,但由于它们没有帮助,我开始尝试其他建议。 - derekmw
显示剩余3条评论
2个回答

0

虽然我相信你现在并不那么在意,但是我几天前记录了同样的问题,而且我仍然卡在这里(点击这里)。我已经进一步缩小了问题范围,发现它与安全有关。如果你增加日志记录,你会看到以下内容:

W 2017-03-06 17:27:41:539 Script.cpp(494) -2147024891 [Access is denied.]: Unable to execute code, call to IHTMLWindow2::execScript failed
W 2017-03-06 17:27:41:540 Script.cpp(180) Cannot create anonymous function
W 2017-03-06 17:27:41:540 ElementFinder.cpp(98) A JavaScript error was encountered executing the findElement atom. 

我已尝试开启/关闭所有安全选项但无济于事。我在本地遇到了问题,还没有设置CI环境,希望当我启动它时,它应该可以正常工作(祈祷)。

附言:我不认为你的虚拟机有问题!!


抱歉使用“破损的虚拟机”这个词。我知道虚拟机不一定是坏的,但我怀疑发生了某些更新(无论是操作系统或浏览器的补丁/安全更新)导致了这个问题。然而,既然我似乎没有办法撤消这个更新,所以我这样说了。如果你找到了让它工作的方法,我会非常感激并倾听。我将保留这个虚拟机并将对比两者,看看是否能够找出问题所在。 - derekmw

0
每当我遇到“NoSuchElementException”(尽管不是在Windows或IE上),这个方法总是有效的:
添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

然后定位元素:

search_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, """//*[@id="lst-ib"]""")))
search_field.send_keys('Example')

感谢《Python网络爬虫实战》一书。希望这能有所帮助,尽管目前我没有Windows或IE来提前验证。


谢谢您的建议,但不行,这在IE上不起作用。需要注意的是,在FF和CH中,简单的查找元素调用可以正常工作。只有在Windows 10上的IE11无法正常工作。 - derekmw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接