Hi!请登陆

Python模拟浏览器实训:自动登陆邮箱|附视频

2021-1-29 47 1/29

Python模拟浏览器:自动登录邮箱为例。

01

实训内容

模拟浏览器有三种实现方式,一种是以模拟特定浏览器的header信息方式实现对浏览器的模拟,一种是使用浏览器内核(例如webkit),另外还可以直接在浏览器上开发组件(firefox/chrome)以实现动态页面的采集。其中,第一种方式只是简单地在爬虫程序调用requests.get时指定headers参数,以下例子是一种基本用法。

useragent= 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Mobile Safari/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应用程序测试系统,包含了测试的录制(selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium
Grid)。它可以模拟真实浏览器,支持多种浏览器,爬虫中主要用来解决Java渲染问题。

这里以爬虫自动登陆邮箱,查看有没有新邮件为例。为达到目的,需要经过安装配置、页面结构分析和程序实现三个步骤,以下分别描述。

1. 安装配置

在python下安装selenium,执行pip install selenium即可,如图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的程序了,以下是主体函数。

frombs4 importBeautifulSoup

fromselenium importwebdriver

fromselenium.webdriver.chrome.options importOptions

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)+ "封新邮件!")

exceptIndexError ase:

print( "没有新邮件!")

# 关闭浏览器

browser.quit

return

通过浏览器组件来模拟浏览器的优点是使用简单,复杂的事都交给框架去处理。但是其缺点也是很明显的,在执行过程中需要启动控制台进程,执行速度慢,需要动态地执行js,并模拟人的浏览器操作。

02

视频讲解

视频讲解如下:

03

参考书籍

《Python爬虫大数据采集与挖掘-微课视频版》

ISBN:978-7-302-54054-0

曾剑平编著

定价:59.80元

04

精彩文章回顾

Python爬虫实训:实现图书信息采集|附源码+视频

Java 15新增类Record的工作实例|附代码

Dart应用Bloc设计模式实例|附代码

从火种到能源,华为做AI的逻辑链

华为 AI,建造中的全景图

逻辑回归的MATLAB实践|附代码

Python爬虫实例:采集微博博文|附视频

MySQL利用E-R模型的数据库概念设计|附视频

HTML5 实现黑白棋游戏 附代码

利用微信小程序实现活动报名登记 | 附代码

使用Flutter小部件跨平台开发移动端App组件 | 附代码

电脑病毒木马的清除和防范方法 | 附视频

教你用Python做在线人脸 检测

Python爬虫实训:实现图书信息采集|附源码+视频

Java 15新增类Record的工作实例|附代码

Dart应用Bloc设计模式实例|附代码

从火种到能源,华为做AI的逻辑链

华为 AI,建造中的全景图

逻辑回归的MATLAB实践|附代码

Python爬虫实例:采集微博博文|附视频

MySQL利用E-R模型的数据库概念设计|附视频

相关推荐