84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
ringa_lee
输入密码之所以不行,是因为密码input一开始是隐藏的,就算你跳转了,页面上可见了,但是browser = webdriver.Chrome()的browser里的page_source中密码框还是不可见的。所以你需要分析页面元素,看看密码框的class前后值。所以需要执行一段JS脚本让密码框可见。browser.execute_script("document.getElementById('i0118').setAttribute('class', 'form-control')")我修改了下你的代码,你可以参考下。此外也需要对登录按钮进行处理。因为一开始登录按钮的值是"下一步"且是disabled。碰到这类问题一定要去看页面,具体分析。 具体看代码
browser = webdriver.Chrome()
browser.execute_script("document.getElementById('i0118').setAttribute('class', 'form-control')")
from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By import time browser = webdriver.Chrome() # logout for 1st step #browser.get('https://outlook.live.com/owa/logoff.owa') browser.get('https://login.live.com/login.srf?&wreply=https%3a%2f%2foutlook.live.com%2fowa%2f%3fnlp%3d1%26realm%3dlogin.live.com') username = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.XPATH, "//input[@id='i0116']"))) username.clear() username.send_keys("your email") nextButton = browser.find_element_by_id('idSIButton9') nextButton.click() time.sleep(3) browser.execute_script("document.getElementById('i0118').setAttribute('class', 'form-control')") password = WebDriverWait(browser, 50).until( EC.presence_of_element_located((By.XPATH, "//input[@id='i0118']"))) password.clear() password.send_keys("your password") browser.execute_script("document.getElementById('idSIButton9').disabled=false") signinButton = browser.find_element_by_id('idSIButton9') signinButton.send_keys(u"登录") signinButton.click() time.sleep(5) browser.close()
我把楼主的代码一行一行贴到ipython中执行,并没有遇到元素不可见的问题。根据楼主贴出来的tb,报错的是test.py文件29行的browser.find_element_by_id('i0118').click()。但这一行并没有出现在楼主贴出的代码中。尴尬了...楼主还是要贴报错的源码哈。在报错这句前,应该没有显示的等待或者WebDriverWait,我猜。
test.py
browser.find_element_by_id('i0118').click()
WebDriverWait
之所以报这个错误selenium.common.exceptions.ElementNotVisibleException,字面意思理解,是因为渲染出的页面中无法定位这个可见的元素。原因可能会包括元素本身不可见,或者页面渲染未完成,当然还有其他原因...
selenium.common.exceptions.ElementNotVisibleException
轻拍...
输入密码之所以不行,是因为密码input一开始是隐藏的,就算你跳转了,页面上可见了,但是
browser = webdriver.Chrome()
的browser里的page_source中密码框还是不可见的。所以你需要分析页面元素,看看密码框的class前后值。所以需要执行一段JS脚本让密码框可见。browser.execute_script("document.getElementById('i0118').setAttribute('class', 'form-control')")
我修改了下你的代码,你可以参考下。此外也需要对登录按钮进行处理。因为一开始登录按钮的值是"下一步"且是disabled。碰到这类问题一定要去看页面,具体分析。 具体看代码我把楼主的代码一行一行贴到ipython中执行,并没有遇到元素不可见的问题。
根据楼主贴出来的tb,报错的是
test.py
文件29行的browser.find_element_by_id('i0118').click()
。但这一行并没有出现在楼主贴出的代码中。尴尬了...楼主还是要贴报错的源码哈。
在报错这句前,应该没有显示的等待或者
WebDriverWait
,我猜。之所以报这个错误
selenium.common.exceptions.ElementNotVisibleException
,字面意思理解,是因为渲染出的页面中无法定位这个可见的元素。原因可能会包括元素本身不可见,或者页面渲染未完成,当然还有其他原因...轻拍...