【问题标题】:Unable to switch to iFrame using Selenium无法使用 Selenium 切换到 iFrame
【发布时间】:2021-06-19 23:08:20
【问题描述】:

我目前正在尝试使用 Selenium for Python 来实现一些网络自动化。 我在结帐时遇到了麻烦,您必须在其中输入信用卡数据。 我知道我必须切换到 iFrame 才能找到输入框。 但我永远无法切换框架。 我尝试了它的 ID 或例如这个:

time.sleep(4)
frame = self.driver.find_element_by_xpath("//iframe[@name= '__privateHeidelpayFrame--heidelpay-holder-iframe-1616489954834']")
self.driver.switch_to.frame(frame)
name_input = self.driver.find_element_by_id("card-holder")
name_input.clear()
name_input.send_keys(credit_card.NAME)

我总是收到“无法定位元素:{"method":"xpath","selector":"//iframe[@name= '__privateHeidelpayFrame--heidelpay-holder-iframe-1616489954834']"}".

我从源代码中添加了一张图片。 Source Code from the Webpage

感谢您的任何建议! 最好的,詹尼克

【问题讨论】:

    标签: python selenium xpath iframe webdriver


    【解决方案1】:

    可能 id & name 属性是动态的。

    尝试使用starts-with() 或使用类等其他属性来识别 iframe。

    frame = self.driver.find_element_by_xpath("//iframe[starts-with(@name, '__privateHeidelpayFrame--heidelpay-holder-iframe-')]")
    self.driver.switch_to.frame(frame)
    

    frame = self.driver.find_element_by_xpath("//iframe[@class='heidelpayUIIframe']")
    self.driver.switch_to.frame(frame)
    

    【讨论】:

    • 哦,太好了!两种方式都有效。因此,如果属性动态变化,我会使用“starts-with()”。我之前也尝试过 class 选项,但可能搞砸了。谢谢!
    【解决方案2】:

    您是否尝试过使用更简单的 API 来查找 iFrame?

    self.driver.find_element(By.NAME, "__privateHeidelpayFrame--heidelpay-holder-iframe-1616489954834'")
    

    退货?

    【讨论】:

    • Atm 我不熟悉 Selenium 以外的其他 API。我尝试了您的解决方案,但它仍然返回相同的错误,即无法找到该元素。
    猜你喜欢
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多