Python send_keys方法未发送所需的值

时间:2019-04-05 18:34:17

标签: python selenium headless

我正在编写一个将填写表格的脚本。它将具有特定值的字符串发送到应在其中输入值的文本字段。但是,尽管总是输入文本字段,但有时字符却变得混乱。例如,在一个字段中,要输入的值是:

420420420420420

但是,已填写的字段中的屏幕截图产生了以下值:

420404204204202

这是为什么?是否可以使用其他方法来避免此问题?

具体来说,这些代码行引起最多的问题:

client.find_element_by_id("nnaerb").send_keys(checkout_parameters[9])
client.find_element_by_id("credit_card_month").send_keys(checkout_parameters[10])
client.find_element_by_id("credit_card_year").send_keys(checkout_parameters[11]) 

2 个答案:

答案 0 :(得分:0)

奇怪的是,它将以不正确的顺序发送给他们。您可以尝试这样的事情:

for key in checkout_parameters[9]:
    client.find_element_by_id("nnaerb").send_keys(key)

这样您可以指定它们一次一次发送吗?

或者您可以将其分解并使用ActionChains

from selenium.webdriver import ActionChains
action_chains = ActionChains(client)
action_chains.move_to_element(client.find_element_by_id("nnaerb"))
action_chains.click()
for key in checkout_parameters[9]:
    action_chains.key_down(key)
    action_chains.key_up(key)
action_chains.perform()

编辑

selenium documentation中说到.key_down()

  

仅应与修饰键(Control,Alt和Shift)一起使用。

因此,使用ActionChains看起来像是:

from selenium.webdriver import ActionChains
action_chains = ActionChains(client)
action_chains.move_to_element(client.find_element_by_id("nnaerb"))
action_chains.click()
for key in checkout_parameters[9]:
    action_chains.send_keys(key)
action_chains.perform()

在这里看起来不会比我的第一个代码块产生更好的结果。

答案 1 :(得分:0)

有时候,卡的输入字段可能会有些棘手,并且硒在某些情况下使用“键”的速度可能太快了。我建议尝试以下方法:)

使用Javascript将实际值设置为给定的元素,它可能不会显示在屏幕上,但是实际上是将值赋予了属性。

nnaerb = driver.find_element_by_id("nnaerb")
month = driver.find_element_by_id("credit_card_month")
year = driver.find_element_by_id("credit_card_year")

driver.execute_script("arguments[0].value = " + checkout_parameters[9] + ";", nnaerb) 
driver.execute_script("arguments[0].value = " + checkout_parameters[10] + ";", month) 
driver.execute_script("arguments[0].value = " + checkout_parameters[11] + ";", year)