Python Selenium:发送密钥太慢

Posted

技术标签:

【中文标题】Python Selenium:发送密钥太慢【英文标题】:Python Selenium: Send keys is too slow 【发布时间】:2018-10-02 00:47:07 【问题描述】:

我正在使用element.send_keys("Anything") 填写表格,但它需要很长时间,并且脚本必须快速填写。

我尝试了不同的 Chromedriver 版本,但没有任何帮助。你知道为什么需要这么长时间吗?我怎样才能让它更快?

注意:我正在搜索 xpath。如果我尝试搜索 ID 或名称,则会收到错误消息。不知道会不会更快。

【问题讨论】:

运行速度有多慢,您需要多快?另外,如果您可以发布minimal reproducible example,那将很有帮助。 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确的问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example. 仔细检查 Web 驱动程序版本和 chrome 版本。检查比特率 32 或 64 位驱动程序和浏览器。我在 IE 上遇到过这个问题,但在 Chrome 上没有,而且存在版本问题。更改版本似乎有所帮助。 我注意到它在我想填写表格的网站上速度很慢。在任何其他网站上,send_keys 都和我想要的一样快。 【参考方案1】:

我在 python 中遇到了同样的问题,用不同的浏览器尝试了所有那些 32 位、64 位的东西,但是 send_keys() 花费了非常长的时间,感觉就像一个脾气暴躁的老男人在打字。 我找到了使用 javascript 和繁荣的解决方案,产生了巨大的影响。以下是使用 Javascript 的方法。

driver.execute_script('document.getElementById("content").value="My Dummy Text";')

地点:

Driver 是您使用以下类似命令创建的浏览器驱动程序:

driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_path)

execute_script 是我们将用来传递 Javascript 的函数

document.getElementByID 是您的 JS 方法,您将使用它来获取文本框/文本区域信息,在这种情况下,因为我们使用的是 getElementByID,因此您必须找到文本框的 ID,在我的情况下是“内容”,请参阅下面的参考:

<textarea class="wp-editor-area" style="height: 361px; margin-top: 37px;" autocomplete="off" cols="40" name="content" id="content" aria-hidden="false"></textarea>

请注意上述 html textarea 标签的 ID 参数。您可以使用 Chrome 开发人员工具找到此信息,方法是执行右键单击和检查,然后复制元素,然后检查 ID 信息。 如果由于某种原因,ID 不存在,您可以使用其他方法,例如 'Class' 或 'Name' 或 'CSS' 等 getElementBy*

更多信息请参考此链接:https://www.w3schools.com/js/js_htmldom_elements.asp

最后,您将使用 .value 参数将内容放入该文本框中。 在我们的例子中,我们将文本“My Dummy Text”作为值传递给文本框,它工作得非常好。

希望这可以帮助任何希望在 python 中加速 send_keys() 的人

注意:此方法将替换 textarea 中的所有现有文本,如果您想保留现有文本,则可以先“获取”元素值,附加到您的字符串,然后传递 value 方法,然后应该可以正常工作。

【讨论】:

【参考方案2】:

我遇到了同样的问题,没有解决,但找到了办法。

将文本复制到剪贴板并粘贴到文本输入中,这样会很快,首先,

pip install xerox(or pyperclip)


xerox.copy("anything")
element.send_keys(Key.CONTROL,'v')

希望这会有所帮助。

【讨论】:

【参考方案3】:

您可以将 pyperclip 与 selenium 一起使用。将字符串复制到 pyperclip 剪贴板,将其粘贴到输入字段中

    import pyperclip as pc
    from selenium.webdriver.common.keys import Keys
    pc.copy("Whatever text to paste")
    element.send_keys(Keys.CONTROL, 'v')  #Paste using Ctrl+V

【讨论】:

谢谢。我能够快速将大文本粘贴到输入字段中。【参考方案4】:

您可以使用 Javascript 输入文本框

((JavascriptExecutor) driver).executeScript("arguments[0].value = arguments[1];", driver_tmp.findElement(By.id("text_id")), text);

【讨论】:

以上是关于Python Selenium:发送密钥太慢的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 无法在找到的元素中发送密钥

Selenium:如何使用Javascript将密钥发送到JQuery输入

在发送密钥和控制台之后获取输入值,记录值Selenium Webdriver

如何在 selenium python 中按 Enter 键?

如何使用 Selenium 和 Python 在信用卡号字段中输入日期?

Python??????selenium?????????