我目前正在用 python 创建一个 selenium 脚本。我需要使用 send_keys 函数在文本框中输入一些内容。到目前为止,它的做法是正确的。但是,为了进行观察,我需要减慢 send_keys 填充文本字段的速度。我有办法做到这一点吗?另外,selenium 中是否有替代 send_keys 的方法? 感谢和问候 卡兰
您可以在发送每个字符后插入暂停。例如,如果您的代码如下所示:
el = driver.find_element_by_id("element-id")
el.send_keys("text to enter")
您可以将其替换为:
el = driver.find_element_by_id("element-id")
text = "text to enter"
for character in text:
el.send_keys(character)
time.sleep(0.3) # pause for 0.3 seconds
迭代马克的答案,您可以将其包装在可重用函数中:
import time
def slow_type(element, text, delay=0.1):
"""Send a text to an element one character at a time with a delay."""
for character in text:
element.send_keys(character)
time.sleep(delay)
带有类型提示的版本:
import time
from selenium.webdriver.remote.webelement import WebElement
def slow_type(element: WebElement, text: str, delay: float=0.1):
"""Send a text to an element one character at a time with a delay."""
for character in text:
element.send_keys(character)
time.sleep(delay)
用途:
el = driver.find_element_by_id("element-id")
text = "text to enter"
slow_type(el, text)
移除空间并放慢速度解决了问题
def type_and_fill_slow(form_id,message):
form_id.clear()
for character in message:
type(form_id)
time.sleep(2)
form_id.send_keys(character)
此例程模拟单击字段并以更真实的方式进行输入。
def simulate_typing(
driver: WebDriver,
element: WebElement,
text: str,
delay: float = 0.1,
):
actions = ActionChains(driver, duration=20)
actions.move_to_element(element)
actions.click(element)
actions.pause(delay)
for letter in text:
actions.send_keys(letter)
actions.pause(delay)
actions.perform()