首页 > 解决方案 > 使用 Selenium + Python 通过弹窗登录

问题描述

我正在尝试使用 Python 中的 Selenium 访问和登录以下网页:

' http://games.espn.com/ffl/leagueoffice?leagueId=579054&seasonId=2018 '

当访问该页面时,会出现一个弹出窗口,询问用户的凭据。下面的代码是我到目前为止所拥有的。

import time
from selenium import webdriver

user = 'test_user'
pw = '*********'

url = 'http://games.espn.com/ffl/leagueoffice?leagueId=579054&seasonId=2018'

driver = webdriver.Chrome("C:\\Users\\abc\\Downloads\\chromedriver\\chromedriver.exe")

driver.get(url)

obj = driver.switch_to_alert

time.sleep(5)

obj.find_element_by_name('email').send_keys(user)
obj.find_element_by_name('password').send_keys(pw)

当我运行它时,我收到此错误:

AttributeError: 'function' object has no attribute 'find_element_by_name'

基于其他stackoverflow线程,我认为我正确地处理了这个问题。有人可以帮我吗?

标签: pythonselenium-webdriverselenium-chromedriverespn

解决方案


您尝试与之交互的元素位于另一个框架中。使用检查器,您可以看到它们在里面<iframe id="disneyid-iframe" name="disneyid-iframe"

因此,在执行任何操作之前,您需要切换到该帧:

driver.switch_to_frame("disneyid-iframe")

然后做你需要的(注意:我更正了定位器以使用 type 属性,因为我没有看到元素具有 name 属性)

driver.find_element_by_css_selector("input[type = 'email']").send_keys(user)
driver.find_element_by_css_selector("input[type = 'password']").send_keys(pw)

请记住在完成与该框架中的元素交互后切换回默认上下文:

driver.switch_to.default_content()


推荐阅读