Python send_keys 方法未发送所需的值
Python send_keys method is not sending the desired values
我正在编写一个用于填写表格的脚本。它将具有特定值的字符串发送到应输入该值的文本字段。然而,虽然文本字段总是输入,但字符有时会变得乱七八糟。例如,在一个字段中,要输入的值是:
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])
嗯,这很奇怪,它会以错误的顺序发送它们。你可以尝试这样的事情:
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()
:
Should only be used with modifier keys (Control, Alt and 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()
这里看起来不会比我的第一个代码块产生更好的结果。
有时卡片输入字段可能有点棘手,而且在某些情况下,selenium 使用的速度 'keys' 可能太快了。我建议尝试以下方法:)
使用 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)
我正在编写一个用于填写表格的脚本。它将具有特定值的字符串发送到应输入该值的文本字段。然而,虽然文本字段总是输入,但字符有时会变得乱七八糟。例如,在一个字段中,要输入的值是:
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])
嗯,这很奇怪,它会以错误的顺序发送它们。你可以尝试这样的事情:
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()
:
Should only be used with modifier keys (Control, Alt and 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()
这里看起来不会比我的第一个代码块产生更好的结果。
有时卡片输入字段可能有点棘手,而且在某些情况下,selenium 使用的速度 'keys' 可能太快了。我建议尝试以下方法:)
使用 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)