如何通过 Actionchains 像人一样打字 send_keys

How to type like a human via Actionchains send_keys

我知道如何用下一个代码慢慢打字:

elem = driver.find_element_by_id("mainCommentForm")
text = "To type text here"
for character in text:
  elem.send_keys(character)
  time.sleep(random.uniform(0.2,0.5))

不幸的是,我工作的网站不允许通过正常的 send_keys 选项键入文本,因为它会给出错误消息。就像我 select 元素,然后我想 send_keys 但它找不到元素,因为它是 deselected 之类的。这与输入 Java 有关。请不要问为什么这不起作用,因为这不是我的问题..

事实是,我需要使用 Actionchains send_keys 选项,如下所示。 但是我现在如何模拟人类的打字,就像上面的例子一样? 通过人工打字,我的意思是一个字母一个字母地打字,而不仅仅是 copy/paste..

elem = driver.find_element_by_id("mainCommentForm")
actions = ActionChains(driver)
actions.move_to_element(elem)
actions.click()
actions.send_keys("This text must be typed in slower..")
actions.perform()

此代码按您希望的方式运行 -

elem = driver.find_element_by_id("mainCommentForm")
text = "To type text here"
for character in text:
  actions = ActionChains(driver)
  actions.move_to_element(elem)
  actions.click()
  actions.send_keys(character)
  print(character)
  actions.perform()
  time.sleep(random.uniform(0.2,0.5))

在python中,如果你想输入类似真人的内容,只需使用此代码,每个字符之间的交易将是随机的

 for char in text:
        start = 0.1 #please edit the speed here
        stop = 0.6 #change this (the maximum value is 1 or 0.9)
        step = 0.3
        precision = 0.1
        f = 1 / precision
        n = random.randrange(start * f, stop * f, step * f) / f
        time.sleep(n)
        user_input.send_keys(char)