擅长:python、mysql、java
<p>这是一个相当棘手的问题。我能想到的唯一方法就是使用<code>ActionChains</code>,特别是keyUp和keyDown函数。在Selenium文档中,它说keyup和keydown仅用于“修改器”键(<code>CTRL</code>、<code>ENTER</code>、<code>SHIFT</code>,等等)。但我认为我们也可以用它们来表示普通的字母数字字符。我浏览了大量Selenium源代码,最终发现传入<code>send_keys()</code>、<code>key_up()</code>和<code>key_down()</code>的内容被处理为<code>KeyInput</code>,一个在<a href="https://github.com/SeleniumHQ/selenium/blob/b287e73ce2b148a2eff82539b9860a6237722c02/py/selenium/webdriver/common/actions/key_input.py#L24" rel="nofollow noreferrer">this file from the selenium python bindings</a>中定义的类。谢天谢地,这个类似乎非常乐意接受任何密钥,所以希望我们可以继续使用<code>key_up('a')</code>之类的东西</p>
<p>那么现在,如何实现您的实际目标,在所有<code>key_up</code>和<code>key_down</code>之间有一个延迟,然后在下一次按键之前有另一个延迟。我相信你会想玩随机等待时间的范围,因为现在我只是复制了你所做的</p>
<pre><code>from selenium.webdriver.common.action_chains import ActionChains
import time
import random
text = "Some text"
for l in text:
action = ActionChains(driver)
action.key_down(l).pause(random.uniform(0.12, 0.4)).key_up(l).perform()
time.sleep(random.uniform(0.12, 0.4))
</code></pre>