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")

如果需要触发输入事件(比如有些页面监听了inputchange事件),可以加上:

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,结果很慢。。。

回到顶部