Selenium的find_element_by_name方法在IE浏览器运行失效求助
Selenium IE 元素查找失败解决方法
- 问题1:页面渲染速度不匹配
IE的页面渲染、JS执行效率远低于Chrome,调用driver.get()后立刻查找元素时,目标元素还未被渲染到DOM树中,导致查找失败。
解决方法:添加显式等待,指定最长等待时间查找目标元素,示例代码如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最长等待10秒,直到目标元素可定位 wait = WebDriverWait(driver, 10) accionar = wait.until(EC.presence_of_element_located((By.NAME, "input_1.3"))) accionar.send_keys(nombre)
- 问题2:IE安全区域配置不符合驱动要求
这是IEDriver的经典兼容问题,要求IE四个安全区域的保护模式配置完全一致。
解决方法:打开IE浏览器的「Internet选项」→「安全」标签,将Internet、本地Intranet、受信任的站点、受限制的站点四个区域的「启用保护模式」选项全部勾选,或者全部取消勾选,保存设置后重启IE即可。 - 问题3:驱动启动参数不全
你当前仅配置了忽略缩放设置,还需要补充兼容配置才能让IEDriver正常识别元素,修改后的驱动初始化代码如下:
from selenium import webdriver capabilities = { 'ignoreZoomSetting': True, 'ignoreProtectedModeSettings': True, 'nativeEvents': False, 'requireWindowFocus': True } driver = webdriver.Ie( executable_path="C:/Program Files (x86)/IEDriverServer.exe", capabilities=capabilities )
- 问题4:目标元素嵌套在iframe中
如果目标表单在iframe标签内,需要先切换到对应iframe再查找元素,示例代码:
# 先根据id/name定位iframe,再切换 driver.switch_to.frame(driver.find_element(By.ID, "iframe的id")) # 后续再执行元素查找逻辑
如果以上操作都完成后仍然无法定位元素,可以先调用driver.page_source打印当前页面的源码,确认IE加载的页面源码和Chrome加载的内容一致,排除IE本身拦截了页面资源的情况。
内容的提问来源于stack exchange,提问作者Abel DC
相关产品推荐
相关产品推荐

