Python Selenium 无法定位 iframe - gmail 帐户生成器

问题描述

希望你们一切都好。我尝试编写“gmail 创建者”。 这个项目对我来说真的很重要,所以我会非常 感谢如果有人可以帮助我。如果你愿意,对于那个 可以帮助我,如果这行得通,将在贝宝上获得一些钱。 不多,但有一些钱。也对不起我的英语我来自德国。 所以 : 我现在挣扎了 4.5 小时。 它只是找不到元素“名字”。我通过正常方式尝试过: 驱动程序通过 xpath 查找元素但没有找到,还有 id 和很多东西。 然后我注意到,页面上有一个 iframe,所以我之前必须切换到它。 但是现在找不到这个iframe。

信息: -Python -硒 -Chrome 网络驱动程序

网站: https://www.google.com/intl/de/gmail/about/#

代码

def main():
    options = webdriver.ChromeOptions()
    options.add_argument("--window-size=950,1000")
    driver = webdriver.Chrome(options=options)
    driver.get("https://www.google.com/intl/de/gmail/about/#")
    time.sleep(randint(1,3))
    #click create account
    while True:
        try:
            driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[4]/ul[1]/li[3]/a").click()
            break
        except:
            yeet = 1
    #works all well till here
  
    #Now I am struggling finding element,firstname element  
    #firstname_input = driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[2]/div[1]/div[2]/div/div/div[2]/div/div[1]/div/form/span/section/div/div/div[1]/div[1]/div[1]/div/div[1]/div/div[1]/input")
    #iframe = driver.find_element_by_xpath("/html/body/iframe")
    #iframe = driver.find_element_by_tag_name("iframe")
    #driver.switch_to.frame(iframe)

    ###all didnt work  

main()

解决方法

点击“创建账户”按钮会打开一个新窗口。
所以,你必须切换到那个新窗口。
为此,您应该执行以下操作:

new_window = driver.window_handles[1]
driver.switch_to_window(new_window)

现在您可以访问“firstname”元素和那里的所有其他元素。
如果您希望最终回到第一个窗口,只需与上述类似:

initial_window = driver.window_handles[0]
driver.switch_to_window(initial_window)

另外,请不要使用像"/html/body/div[2]/div[1]/div[4]/ul[1]/li[3]/a这样的长绝对定位符。
可以通过此 //li/a[@data-action="create an account" and (contains(@class,'button'))] XPath

找到“创建按钮”