当前的 Stripe 配置将卡号、到期日期 (exp-date) 和 cvc 放在不同的 iframe 中。与以前不同,所有内容都在一个 iframe 中,并且上述解决方案有效。
我只需转移到一个 iframe 即可更新卡信息。然后 Stripe 的变化来了,前端开发者更新了支付网页。然后是到期日期和 cvc 的“无法定位元素...”错误。同样,我问开发人员是否可以为 3 个输入输入 ID 或名称。他说,他做不到,Stripe 会制作付款屏幕。
通常,当您在 Firefox 或 Chrome 中检查信用卡信息时,您会看到输入属于哪个 iframe。
在我们的网页中,卡号在 __privateStripeFrame5 中。 exp-date 在 __privateStripeFrame6 中,cvc 在 __privateStripeFrame7 中。
这是解决我在使用 selenium python 更新/测试卡信息时遇到的难题的代码(java 具有类似的方法/功能):
# has_zip_code - True or False
# added params for flexibility
# exp_date - expiration date
# cvc_val - 3-digit number
def enter_card_details_and_submit(driver, card_num, exp_date, cvc_val, has_zip_code):
#print("\n{} -------------------------------------------\n".format(PI_WIN))
print("Use card number ... {}".format(card_num))
print(card_num)
driver.switch_to.frame(frame_reference=wait_and_get_elem_by(driver, By.NAME, "__privateStripeFrame5"))
card_num_text = wait_and_get_elem_by(driver, By.NAME, "cardnumber")
card_num_text.click()
time.sleep(1)
card_num_text.send_keys(card_num)
driver.switch_to.default_content()
print("\nEnter expiry month/year ...")
iframe6 = wait_and_get_elem_by(driver, By.NAME, "__privateStripeFrame6")
driver.switch_to.frame(iframe6)
exp_dt = wait_and_get_elem_by(driver, By.NAME, "exp-date")
exp_dt.click()
time.sleep(1)
exp_dt.send_keys(exp_date)
driver.switch_to.default_content()
print("\nEnter CVC ...")
driver.switch_to.frame(frame_reference=wait_and_get_elem_by(driver, By.NAME, "__privateStripeFrame7"))
cvc = wait_and_get_elem_by(driver, By.NAME, "cvc")
cvc.click()
time.sleep(1)
cvc.send_keys(cvc_val)
.
.
.
wait_and_get_elem_by() 是一个内部函数,用于查找元素,但其中包含 wait() 函数。您可以使用 find_element_by_name()。
使用 selenium (python) 更新卡号、exp-date 和 cvc: