如何使用 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 pythontl;博士
您可以在以下位置找到一些相关的详细讨论:
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 在信用卡号字段中输入日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 和 Selenium 进行分页抓取页面
如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?