在Python Selenium中输入信用卡数据

2024-09-30 16:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我之前问的另一个问题

Dynamic element details

我正在尝试使用Python和Selenium到达一个页面并输入信用卡数据。与前面的问题不同,该字段具有动态属性,该字段具有静态名称,这意味着我可以按名称查找元素,并输入一些数据,这里似乎缺少一些重要的内容。以下是页面详细信息:

<input type="tel" id=cc-yN0P6v-14" autocomplete="off" name="txtCrdtCrdNum" class="a-input-text">

我的selenium代码如下所示

objCrdNumber = driver.find_element_by_name('txtCrdtCrdNum')
objCrdNumber.send_keys(UserData.CrdtCrdNumber)

我收到了错误信息

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

那时我才意识到tel类型的输入。我想知道这和什么有什么关系。但我被难倒了

Update

非常感谢@Prophet。多走了一英里,和我一起走,直到问题解决。我们丢失了一个在我们正在查看的区域中不可见的iFrame


Tags: 数据name名称inputselenium动态dynamic页面
1条回答
网友
1楼 · 发布于 2024-09-30 16:21:41

ElementNotInteractableException表示您试图访问当前不可交互的元素。
这可能是由几个原因造成的

  1. 元素不可见,因为它不在视图中
  2. 元素仍然没有完全渲染
  3. 某些其他元素当前正在覆盖此元素。
    可能是其他的,但与上面类似。
    由于我不知道是什么原因导致您的问题在您的具体情况下,您可以尝试以下之一,它应该工作
  1. 要查看元素,请尝试以下操作:
from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
objCrdNumber = driver.find_element_by_name('txtCrdtCrdNum')
actions.move_to_element(objCrdNumber).build().perform()
time.sleep(0.5)
objCrdNumber.send_keys(UserData.CrdtCrdNumber)
  1. 要等待元素完全呈现,请尝试以下操作:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 20)
wait.until(EC.visibility_of_element_located((By.NAME, "txtCrdtCrdNum"))).send_keys(UserData.CrdtCrdNumber)

UPD
您的元素位于iframe中。
您必须切换到该iframe才能访问其中的元素

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@class,'secure')]"))

完成该表单后,请不要忘记使用切换到默认内容

driver.switch_to.default_content()

相关问题 更多 >