【问题标题】:How to enter date in the credit card number field using Selenium and Python?如何使用 Selenium 和 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

标签: python selenium iframe webdriverwait credit-card


【解决方案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
    

参考

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


tl;博士

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

【讨论】:

    【解决方案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
    猜你喜欢
    • 2013-06-05
    • 2018-09-21
    • 2021-08-06
    • 2021-09-15
    • 1970-01-01
    • 2016-02-18
    • 2019-03-11
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多