1.书本上写的代码和实际的有点出入,可能是126邮箱进行更改过,写完这段代码以后会发现报错,找不到元素
2.我们仔细分析126邮箱登录界面,需要点击这个地方才能跳转到登录窗口,于是按F12查看元素
3.我们发现这个id为switchAccountLogin,于是我们知道了需要点击一下这个才能进行跳转,于是有了driver.find_element_by_id(“switchAccountLogin”).click()这个语句
4.等你打开这个页面,你以为只要获取账号和密码的id或者Xpath值就可以登录的时候,你想太多了哈哈哈
5.我们按F12继续查看元素,我们发现会在他们之前会多了一个ifname
6.而这个ifname对应的则是这整块区域,所以我们要先获取这个区域,再去获取下面的账号和密码框,于是有了语句driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,‘x-URS-iframe’)]"))
driver.switch_to.frame:表示获取的ifname和frame
driver.find_element_by_xpath:获取xpath
contains:判断id x-URS-iframe是否存在,存在为true,不存在未false
7.这个时候我们来获取他的账号框的值,我们这里可以用name来获取,密码框的值也同理
8.我们再获取点击登录按钮的值,这个时候可以用id
大功告成,完整代码如下
import time #导入time库
from selenium import webdriver #导入驱动
driver = webdriver.Firefox() #打开火狐浏览器
driver.get("http://www.126.com") #打开126邮箱
driver.find_element_by_id("switchAccountLogin").click() #点击账号密码登录
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]")) #定位到登录页面
driver.find_element_by_name("email").clear() #清除账号框里面输入的值
driver.find_element_by_name("email").send_keys('username') #输入账号,username为你的126账号
driver.find_element_by_name("password").send_keys('password') #输入密码,password为你的密码
driver.find_element_by_id("dologin").click() #点击登录按钮
time.sleep(20) #设置等待时间20s,为了方便查看效果
driver.quit #退出浏览器