Python Selenium源缺少登录字段
我正在尝试使用Selenium和Python登录ESPN页面: 当你转到这个页面时,它会弹出一个登录框,但是Selenium似乎找不到它的字段 这是我的密码:Python Selenium源缺少登录字段,python,python-3.x,selenium,selenium-webdriver,Python,Python 3.x,Selenium,Selenium Webdriver,我正在尝试使用Selenium和Python登录ESPN页面: 当你转到这个页面时,它会弹出一个登录框,但是Selenium似乎找不到它的字段 这是我的密码: driver = webdriver.Chrome() driver.get('http://games.espn.go.com/ffl/scoreboard leagueId=34467&matchupPeriodId=1') username = driver.find_element_by_name('username')
driver = webdriver.Chrome()
driver.get('http://games.espn.go.com/ffl/scoreboard leagueId=34467&matchupPeriodId=1')
username = driver.find_element_by_name('username')
username.send_keys('XXXXX')
password = driver.find_element_by_name('password')
password.send_keys('XXXXX')
submit_button = driver.find_element_by_name('submit')
submit_button.click()
当我自己在Chrome中查看页面源代码时,我会看到以下表单:
<table width=100% border=0 cellpadding=0 cellspacing=0 class="bodyCopy"><tr>
<td width=15%><b>MEMBER NAME:</b></td>
<td width=1%> </td>
<td><input name="username" size="16" maxlength="64" value="" class="select"> </td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td> </td>
<td><input type="password" name="password" size="16" maxlength="25" value="" class="select"></td>
</tr>
<tr>
<td colspan=2> </td>
<td><input type="submit" name="submit" value="Log In" class="select"></td>
</tr>
</form>
</table>
…表格完全丢失了。我可以在浏览器窗口中看到与Selenium打开的表单相同的表单,只是源代码中缺少该表单。有什么想法吗?第一个问题是登录表单位于
iframe
中,您需要切换到它:
driver.switch_to.frame("disneyid-iframe")
第二个问题是表单是动态加载的。在开始登录之前,您需要输入用户名字段的显示时间(当然,人类也会这样做):
请注意,定位器指向不存在的图元。改用:
username = driver.find_element_by_css_selector("div.field-username-email input")
password = driver.find_element_by_css_selector("div.field-password input")
submit_button = driver.find_element_by_xpath("//button[contains(., 'Log In')]")
我切换到iframe并进行显式等待,但仍然收到“selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“名称”,“选择器”:“用户名”}“用户名起作用,但仍然找不到密码字段。@TonyTrozzo是的,我有多个更新,现在检查一下。谢谢,现在工作了!非常感谢你!
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.field-username-email input")))
print(driver.page_source)
username = driver.find_element_by_css_selector("div.field-username-email input")
password = driver.find_element_by_css_selector("div.field-password input")
submit_button = driver.find_element_by_xpath("//button[contains(., 'Log In')]")