【问题标题】:Python Selenium: Send keys is too slowPython Selenium:发送密钥太慢
【发布时间】: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 都和我想要的一样快。

标签: python performance selenium key send


【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 2022-11-10
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        相关资源
        最近更新 更多