将值输入 iframe python selenium shopify 付款

Entering values into iframe python selenium shopify payments

我正在尝试使用 selenium + python 将信用卡值输入 Shopify 网站。输入卡值的框在 iframe 中,我不确定如何切换到此 iframe。

我目前有这个代码:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,
                   '//*[@id="card-fields-number-950kvfi9pbn00000"]'))
                   ).send_keys(card_number, Keys.TAB, name_on_card, Keys.TAB,expiry_date, cvv)
driver.switch_to.default_content()

但是这个returns错误:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(...

selenium.common.exceptions.TimeoutException: Message: 

如此有效,找不到元素...

这是页面的HTML: (https://gyazo.com/80d9d3c941c62ededc81d5fbc327a71f)

我想获得有关如何访问此元素的一些帮助,我还尝试通过将 id 更改为此标签的父元素来访问它。我还添加了一个 time.sleep(20),这样我就可以确定页面已完全加载,但我仍然遇到同样的错误。

您可以使用 switch_to_frame 方法切换到 iframe。

iframe = driver.find_element(By.XPATH, '//*[@id="card-fields-number-950kvfi9pbn00000"]')
driver.switch_to_frame(iframe)
#You're now 'in' the iframe

你应该试试 driver.switch_to_frame("Insert 'Name'of Iframe here"),然后找到你的元素。找到元素后。你可以试试:

ELEMENT.send_keys(card_number, Keys.TAB, name_on_card, Keys.TAB,expiry_date, cvv)
driver.switch_to.default_content()

但我建议搜索每个元素而不是使用 Tab 键。由于网站可以随时更改,因此将来更容易修复或调整。本质上,您可以使用 if 语句来检测字段,如果存在,则填写它们。

问题是元素的名称和 ID 是动态的,并且会针对每个唯一的结帐而变化window这是一个有效的代码:

iframe = driver.find_element_by_class_name('card-fields-iframe')
driver.switch_to.frame(iframe)
driver.find_element_by_name('number').send_keys(card_number, Keys.TAB,name_on_card,Keys.TAB,expiry_date,Keys.TAB, cvv)
driver.switch_to.default_content()