如何使用 Selenium 和 Python 在信用卡号字段中输入日期?

Posted

技术标签:

【中文标题】如何使用 Selenium 和 Python 在信用卡号字段中输入日期?【英文标题】:How to enter date in the credit card number field using Selenium and Python? 【发布时间】:2021-03-15 01:54:47 【问题描述】:

我正在尝试制作一个脚本以在 Shopify 网站上自动结帐。当我尝试填写请求信用卡的字段时,selenium 不允许我将密钥发送到字段中,并且说该元素不可交互。我已经尝试点击它,但它仍然不允许我输入信息。有谁知道该怎么做?

driver.find_element_by_xpath('//div[@data-card-field-placeholder="Card number"]').click()
driver.find_element_by_xpath('//div[@data-card-field-placeholder="Card number"]').send_keys("1234")

网址:https://feature.com/4089909/checkouts/2f7c52e34622f0f301c0d4b5720ad80e?previous_step=shipping_method&step=payment_method

是我要测试的链接

【问题讨论】:

你使用的是什么定位器 请添加html dom 对不起,这是我的第一个编码项目,我对编码还很陌生,html dom 到底是什么?我也在使用请求和 json 当您右键单击鼠标并选择检查时,您会看到一个带有 html 的 chrome 调试器添加您从中获得此定位器的 html 信息 你是这个意思吗? imgur.com/a/VyQxbom 【参考方案1】:

要访问该页面以提供信用卡详细信息,我们需要超越 CONTACT INFORMATION 信息页面。因此,无法直接访问它。

理想情况下,信用卡号字段位于<iframe> 中。因此,要访问 <iframe> 中的 Creditcard Number 字段,您必须:

诱导WebDriverWait 使所需的帧可用并切换到它

诱导WebDriverWait 使所需的元素可点击

您可以使用以下任一Locator Strategies:

使用CSS_SELECTOR

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_css")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[data-card-field-placeholder="Card number]"))).send_keys("1234")

使用XPATH:

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"iframe_xpath")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-card-field-placeholder="Card number"]"))).send_keys("1234")

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

参考

您可以在以下位置找到一些相关讨论:

Ways to deal with #document under iframe Switch to an iframe through Selenium and python

tl;博士

您可以在以下位置找到一些相关的详细讨论:

Unable to locate element of credit card number using selenium python NoSuchElementException: Message: Unable to locate element while trying to click on the button VISA through Selenium and Python

【讨论】:

【参考方案2】:

您应该使用带有输入标签或任何可交互标签的元素来使用 sendKeys

查看父 div 元素是否有子 input 标签元素并找到该元素而不是 div

里面也有iframe,所以如果输入标签是inisde iframe,那么先找到iframe元素再使用

driver.switch_To.frame(iframe)

然后找到输入元素

每个 iframe 都是独立的会话,你不能从一个框架与其他框架对话,所以如果你想访问一个框架内的元素,你必须先切换到该框架

完成后使用driver.switch_to.default_content()切换回主框架

【讨论】:

imgur.com/a/0Mvx4Vn 我试过这个,但它给了我“字符串不是有效的 XPath 表达式。” driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) driver.find_element_by_xpath('//input[@required autocomplete="cc-number"]').send_keys("1234") driver.find_element_by_xpath('//input[@autocomplete="cc-number"]').send_keys("1234") 或 driver.find_element_by_xpath('//input[@id="number "]').send_keys("1234") try this 位于 required 不是属性,可以使用它的 aproperty 、 automcomple 或 id 另外看看是否有多个 iframe ,如果有多个 iframe 你唯一找到 iframe 然后切换到它 会有很多带有 iframe 的标签,尝试使用 xpath 或 css 查找并确保定位器只找到一个您感兴趣的 iframe

以上是关于如何使用 Selenium 和 Python 在信用卡号字段中输入日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Selenium和Python下载图像

如何使用 Python 和 Selenium 进行分页抓取页面

如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?

如何使用Selenium和Python从Java脚本获取变量值

如何使用Python和Selenium分页来抓取页面

如何使用Selenium和Python在网站内的页面中导航?