Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium源缺少登录字段_Python_Python 3.x_Selenium_Selenium Webdriver - Fatal编程技术网

Python 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')

我正在尝试使用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')
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%>&nbsp;&nbsp;</td>
<td><input name="username" size="16" maxlength="64" value="" class="select">            </td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td>&nbsp;&nbsp;</td>
<td><input type="password" name="password" size="16" maxlength="25" value="" class="select"></td>
</tr>
<tr>
<td colspan=2>&nbsp;</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')]")