Python + Selenium 操作 IE 浏览器时 send_keys 输入很慢怎么办?
iedriver 是 32 位的,正常运行很快,但是用 pycharm 调试的时候就变得非常慢,我知道 64 位的 iedriver 有这个 bug,但是我用的是 32 位的,之前一直是挺好的,但是今天正常运行也是正常的,但是开 debug 模式就会很慢,不知道有没有大神遇到过这个情况
Python + Selenium 操作 IE 浏览器时 send_keys 输入很慢怎么办?
3 回复
都开了 debug 模式了,再加上 pycharm 在里面搞事情,慢点也正常啊。不知道楼主在纠结什么?正常运行反正不会在 pycharm 里跑,也不会 debug 模式跑啊
用 send_keys 往 IE 里输入慢是老毛病了,主要是IE驱动和浏览器本身的问题。你可以试试下面这几个方法,直接上代码:
1. 最常用的一招:在输入前先 clear()
有时候元素里有残留值会影响速度,先清空再输入。
element = driver.find_element_by_id("input_box")
element.clear() # 先清空
element.send_keys("your_text")
2. 终极方案:用JavaScript直接设置值 这是最快的方法,直接绕过Selenium的模拟输入。
element = driver.find_element_by_id("input_box")
driver.execute_script("arguments[0].value = arguments[1];", element, "your_text")
如果需要触发输入事件(比如有些页面监听了input或change事件),可以加上:
driver.execute_script("""
arguments[0].value = arguments[1];
arguments[0].dispatchEvent(new Event('input', { bubbles: true }));
arguments[0].dispatchEvent(new Event('change', { bubbles: true }));
""", element, "your_text")
3. 调整IE驱动设置 在初始化驱动时加上这些参数:
from selenium import webdriver
options = webdriver.IeOptions()
options.require_window_focus = False # 允许后台操作
options.native_events = False # 禁用原生事件(有时更快)
options.ignore_protected_mode_settings = True
options.ignore_zoom_level = True
driver = webdriver.Ie(executable_path="你的IEDriver路径", options=options)
4. 如果非要坚持用 send_keys,可以拆成单个字符发送
虽然看起来怪,但有时比一次性输入快:
text = "your_text"
for char in text:
element.send_keys(char)
# 可以加个微小延迟,但通常不需要
# time.sleep(0.01)
总结建议:优先用JavaScript注入,这是IE下最快的输入方式。
找到原因了,前一次运行之后 iedriver 没有结束,导致下次运行又启动了一个 iedriver,结果很慢。。。

