Python模拟浏览器实训:自动登陆邮箱|附视频
原标题:Python模拟浏览器实训:自动登陆邮箱|附视频
文章图片
Python模拟浏览器:自动登录邮箱为例 。
01
实训内容
模拟浏览器有三种实现方式 , 一种是以模拟特定浏览器的header信息方式实现对浏览器的模拟 , 一种是使用浏览器内核(例如webkit) , 另外还可以直接在浏览器上开发组件(firefox/chrome)以实现动态页面的采集 。 其中 , 第一种方式只是简单地在爬虫程序调用requests.get时指定headers参数 , 以下例子是一种基本用法 。
useragent='Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.121MobileSafari/537.36'
http_headers={
'User-Agent':useragent,
'Accept':'text/html'
#其他头部属性
}
page=requests.get(url,headers=http_headers)#url要请求的网址
其中 , useragent的值可以通过5.5.1浏览器的开发者模式下查看请求头 , 获取对应的User-Agent 。
当页面JS脚本比较复杂、AJAX交互较多或存在不同页面之间大量数据交换的情况下 , 使用浏览器组件来模拟浏览器进行页面内容采集就是比较合适的选择了 。 这里以selenium为例介绍具体方法 。 selenium是一套完整的web应用程序测试系统 , 包含了测试的录制(seleniumIDE)、编写及运行(SeleniumRemoteControl)和测试的并行处理(SeleniumGrid) 。 它可以模拟真实浏览器 , 支持多种浏览器 , 爬虫中主要用来解决Java渲染问题 。
这里以爬虫自动登陆邮箱 , 查看有没有新邮件为例 。 为达到目的 , 需要经过安装配置、页面结构分析和程序实现三个步骤 , 以下分别描述 。
1.安装配置
在python下安装selenium , 执行pipinstallselenium即可 , 如图5-14 。 安装完成后 , 下载chromedriver(http://chromedriver.storage.googleapis.com/index.html) , 这里以以chrome为例 。 chromedriver的版本有很多 , 一定要下载与电脑上chrome浏览器版本相对应的版本 。 下载zip包之后 , 将其解压 。 发现里面仅有一个chromedriver.exe文件 , 需放到Chrome浏览器安装目录(即chrome.exe所在的目录)里面 , 如图5-15所示 。
文章图片
▍图5-14安装selenium
文章图片
▍图5-15将chromedriver.exe放到Chrome浏览器安装目录里
最后 , 将浏览器环境变量添加到操作系统的path环境变量中 , 即完成安装配置过程 。
2.页面结构分析
这里以登陆邮箱为例(https://mail.fudan.edu.cn/),爬虫自动输入用户名、密码 , 并点击“登录”按钮 , 相应的页面部分如图5-16所示 。 通过页面的源代码 , 寻找相应界面控件对应的控件名称 , 用户名uid , 密码为password , 以及登陆按钮Button 。
登陆以后 , 通过浏览器的开发者模式的Source选项找到信息的位置 , 即新邮件数目 , 如图5-17所示 。
文章图片
▍图5-16邮箱登陆页面的部分
文章图片
▍图5-17寻找所需要的信息(新邮件数)
3.程序实现
在上述步骤分析完成之后就可以写出Python的程序了 , 以下是主体函数 。
frombs4importBeautifulSoup
fromseleniumimportwebdriver
fromselenium.webdriver.chrome.optionsimportOptions
importtime
importgetpass
defstart_browser(uid,passwd):#参数为用户id和口令
#调用图形界面
chrome_options=Options
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser=webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://mail.fudan.edu.cn/')#指定URL
time.sleep(2)#延迟 , 等待返回
#模拟填写查询内容
browser.find_element_by_id("uid").send_keys(uid)
browser.find_element_by_id("password").send_keys(passwd)
#模拟单击登陆按钮
browser.find_element_by_class_name("Button").click
time.sleep(2)
#登陆以后的页面中划分了Frame , 切换到相应的Frame中进行信息提取
browser.switch_to.frame('welcome')
html=browser.page_source
#使用BeautifulSoup , 具体用法在第6章介绍
soup=BeautifulSoup(html,'html.parser')
try:
params=soup.select('.fNewMail')[0].text.strip
print("有"+str(params)+"封新邮件!")
exceptIndexErrorase:
print("没有新邮件!")
#关闭浏览器
browser.quit
return
通过浏览器组件来模拟浏览器的优点是使用简单 , 复杂的事都交给框架去处理 。 但是其缺点也是很明显的 , 在执行过程中需要启动控制台进程 , 执行速度慢 , 需要动态地执行js , 并模拟人的浏览器操作 。
- 石油钻井开采教学模拟装置 石油机械仿真模型 欠平衡钻井装置教学平台
- 汽车模拟驾驶受欢迎 谈中国驾驶模拟器行业发展
- 五款绝没玩过的最新安卓单机游戏《CS反恐精英世界》《瑞森黎明》《公交车模拟器》《飙速车神》《钢铁之翼》
- GAS费得以解决 飞驰浏览器升级完成 FIL未来千倍币
- 微软正在测试 Edge 浏览器 “计算器”功能:可算一元二次方程,还可截屏计算
- 得帆云 | 产品更新日志-202103051、优化移动端各组件的显示效果2、提升添加数据权限功能的使用体验3、持续优化得帆云QQ浏览器中使用体验4、其他已知BUG的
- 日本一新作《侦探扑灭》新影像赏!搜查模拟部分介绍
- 新闻演播室模拟游戏《不予播出》发布新章节
- 日本一《侦探扑灭》第2弹PV“搜查模拟讲座”
- 魅族|新版魅族浏览器上线魅族18系列:无广告 纯粹到头了