使用selenium模拟登陆163邮箱

摘要

这次主要是稍微学习一下selenium,并进行简单的模拟登陆。网络上有许多有意思的网站,不同类型的网站爬虫策略不同,难度也不一样。从是否要登录这方面讲,一些简单网站不需要登录就可以爬取,比如猫眼电影、豆瓣250榜单等。还有一些是需要先登录才能爬取,比如微信、知乎、学校的教务系统等。
selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的源代码,做到见到什么爬什么。
在寒假的时候我爬取过学校的教务系统的成绩,感觉比较简单,所以今天,再来一个简单的模拟登陆163邮箱温习一下。

准备工作

我用的是Chrome浏览器,所以需要下载对应版本的ChromeDriver并配置好。
这是ChromeDriver的官方下载网址

https://sites.google.com/a/chromium.org/chromedriver/

顺便安装好selenium

pip install selenium

开整

首先,如往常一样,打开浏览器,打开pycharm,创建个新的py文件,然后导包并声明浏览器对象。

from selenium import webdriver
browser = webdriver.Chrome()

然后查看一下163邮箱登录页面的源代码
使用selenium模拟登陆163邮箱
哦豁完蛋,iframe表单嵌套,由于网页中iframe的id是动态的,所以不能用id寻找邮箱账号对应的iframe,所以这里用frame的index来定位,代码如下:

browser.switch_to.frame(0)

然后找邮箱的账号和密码输入框以及登录按钮,顺便把自己的账号密码输入到框里,然后登陆
使用selenium模拟登陆163邮箱
使用selenium模拟登陆163邮箱
完整代码

import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://mail.163.com')
time.sleep(3)
#iframe = browser.find_element_by_tag_name('iframe')
#browser.switch_to.frame(iframe)
browser.switch_to.frame(0)
browser.find_element_by_name("email").clear()
browser.find_element_by_name("email").send_keys('Ying****)
browser.find_element_by_name("password").clear()
browser.find_element_by_name("password").send_keys('w******')
browser.find_element_by_id("dologin").click()

总结

在找iframe的时候代码browser.switch_to_frame()是被划了删除线 好像是因为更新了的原因吧 所以要改写成browser.switch_to.frame()才可以使用。
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位。而frame与iframe对selenium定位而言是一样的,内部的元素都会不能直接定位到。