selenium自动化操作
在前面爬虫的相关介绍中,我们介绍了如何抓取静态页面信息。但是,在实际的网页浏览过程中,我们可能会经常碰到各种需要进行交互的操作,典型的如输入信息、点击按钮之类。
对于这种场景,之前的静态页面操作方式已经不能满足需求,这时我们需要借助新的工具,比如selenium或者PhantomJS。由于后者已经停止维护,推荐使用前者。
1.selenium是什么
如果大家有做过web的自动化测试,相信对于selenium一定不陌生,测试人员经常使用它来进行自动化测试。
selenium最初是一个自动化web测试工具,通过代码模拟人使用浏览器自动访问目标站点并操作,比如跳转、输入、点击、下拉等。
由于开发者的不断完善,目前的功能越来越强大,基本支持各种交互操作。同时,不止支持有界浏览,还支持无界浏览。
2.selenium有什么用
正如我们前面讲过的,爬虫的本质过程就是模拟人对浏览器的操作过程。在爬虫中使用,selenium主要是为了解决requests无法执行javaScript代码的问题。
本质上是通过驱动浏览器,完全模拟浏览的操作,比如跳转、输入、点击、下拉等...进而进行跳转。
当然,它也有坏处,主要的坏处就是它的速度比较慢。原因是selenium在操作时,需要等浏览器对页面的元素渲染好之后才能操作。而我们知道,由于页面渲染过程需要加载各种资源,响应速度与网络带宽要求非常高。通常情况,它比静态页面的响应至少慢一个数量级。
3.如何使用selenium
在知道selenium是什么以及有什么用之后,我们来具体学习如何操作这个工具。
由于selenium本质是模拟人对浏览器进行输入、选择、点击等操作,因此对于目标标签的定位非常重要。
在前面的章节,我们对于如何定位目标标签有过详细的介绍,这里就不再赘述。selenium对于目标标签定位的方式本质与静态的页面一样,只不过因为使用的包不同,因此在beautifulSoup中使用的是find和findAll,而在selenium中使用的接口有所变化。
下图中已对各种定位方式进行了归纳总结:

在找到目标标签之后,最重要的是对这些标签进行模拟操作。Selenium库下webdriver模块常用方法主要分类两类:一类是模拟浏览器、键盘操作,另一类是模拟鼠标操作。
3.1模拟浏览器、键盘操作
模拟浏览器、键盘操作的方法归纳如下:

3.2 模拟鼠标操作
模拟鼠标操作的方法归纳如下:

4.示例演示
在介绍了selenium相关的使用方法之后,我们来进行操作。这里介绍两个例子:第一个例子是模拟百度搜索,第二个例子是模拟自动登录网易163邮箱发送邮件。
在开始示例之前我们需要安装selinum插件包,同时还需要下载webdriver。在我们的示例中,需要是使用chrome浏览器进行操作,需要使用浏览器的驱动webdriver。
关于下载什么版本的webdriver,可以在浏览器的属性中查看,并在http://npm.taobao.org/mirrors/chromedriver/下载对应的版本就好,如果是其他的浏览器,则需要下载对应的浏览器驱动程序,这种不再做进一步介绍。


4.1模拟百度搜索
第一步还是需要打开目标的地址“w w w.baidu.com”,分析目标网页中目标元素的特点,如下图所示:

通过分析,我们很容易就找到搜索框的id为kw,点击按钮的id为su,余下的就是使用方法进行模拟。
实现的代码如下所示:
from selenium import webdriver
#get 方法 打开指定网址
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#选择网页元素
element_keyword = driver.find_element_by_id('kw')
#输入字符
element_keyword.send_keys('python 爬虫')
#找到搜索按钮
element_search_button = driver.find_element_by_id('su')
element_search_button.click()
driver.close()

4.2模拟自动登录网易163邮箱发送邮件
操作过程跟上面相似,第一步也是分析目标网页http://mail.163.com。
如下图所示:

找到了目标标签然后就是模拟登录。
实现代码如下:
# coding:UTF-8
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('http://mail.163.com/')
driver.switch_to_frame(driver.find_element_by_tag_name('iframe'))
# driver.switch_to_frame('x-URS-iframe')
driver.find_element_by_name('email').clear()
driver.find_element_by_name('email').send_keys('邮箱地址')
driver.find_element_by_name('password').send_keys('邮箱密码', Keys.ENTER)
# 跳转页面时,强制等待6s
time.sleep(6)
# 点击写信按钮
driver.find_element_by_xpath("//div[@id='dvNavTop']/ul/li[2]/span[2]").click()
time.sleep(2)
# 收件人
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('目标的邮箱')
driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(
u'测试') # 主题
xpath = driver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe")
# 文本内容在iframe中
driver.switch_to_frame(xpath)
driver.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'这是一个自动化测试邮件')
# 发送按钮在iframe外,所以需要跳出
driver.switch_to_default_content()
# 发送
driver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()
driver.close()

当然,在实际过程中,可能往往还有验证码的验证。因为现在的验证码难度越来越大,形式也多种多样,使用常规的方法很难解决,必须借助机器学习或者第三方接口进行实现,将在后续单独列一个章节进行介绍如何破解验证码。
selenium自动化操作的更多相关文章
- Selenium自动化脚本开发总结
Selenium Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mo ...
- selenium自动化过程中如何操作Flash动画
最近在看python的爬虫框架(scrapy),一个词概括就是:"酸爽"!等把selenium自动化版块讲完后,打算写一写关于scrapy相关的知识,打算从源码角度解析下scrap ...
- Python+Selenium自动化-模拟键盘操作
Python+Selenium自动化-模拟键盘操作 0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...
- Python+Selenium自动化 模拟鼠标操作
Python+Selenium自动化 模拟鼠标操作 在webdriver中,鼠标的一些操作如:双击.右击.悬停.拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就 ...
- Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析
加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景 在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...
- Selenium2学习-032-WebUI自动化实战实例-030-JavaScript 在 Selenium 自动化中的应用实例之五(高亮标示元素)
在自动化脚本编写过程中,操作元素之前,需要对元素进行高亮显示(通过修改元素的边框样式),同时进行截图,以记录操作的元素对象.在实际应用中较为少见,通常用于演示,或者发生错误时的屏幕截图捕捉,用于错误报 ...
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- Selenium2学习-011-WebUI自动化实战实例-009-JavaScript 在 Selenium 自动化中的应用实例之一(赋值)
通常在编写 Selenium 的 WebUI 自动化脚本时,有些元素不易定位元素,或有些元素为隐藏的(此时用 WebElement.getText() 获取其值的时候,返回的结果为空),对日常的 UI ...
- splinter python浏览器自动化操作,模拟浏览器的行为
Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有 ...
随机推荐
- 使用Docker发布blazor wasm
Blazor编译后的文件是静态文件,所以我们只需要一个支持静态页面的web server即可. 根据不同项目,会用不同的容器编排,本文已无网关的情况下为例,一步一步展示如何打包进docker 需求 H ...
- HomeLede 2020.5.27更新 UPnP+NAS+多拨+网盘+DNS优化+帕斯沃/Clash 无缝集成+软件包
交流群:QQ 1030484865 电报 t.me/t_homelede 固件说明 基于Lede OpenWrt R2020.5.20版本(源码截止2020.5.27)及若干自行维护的软件包 结合 ...
- [Office#PPT]0001.实例剖析-如何制作一个牛B的融资PPT
一些好公司明明在模式上富有创新性,但却在 pitch 时很保守,而且他们又不缺设计和开发能力.如何设计你的融资演讲稿才会吸引投资人对你投资?投资人 Daniel Eckler给大家贡献了下面这篇技术贴 ...
- [Objective-C] 006_Protocol(协议)
学过java的同学都知道Interface(接口),那么在Objective-C中有没有接口呢?其实 Objective-C中用Protocol(协议)来实现的,在Objective-C具体怎么用,我 ...
- vc程序设计-----位图
// resource_study.cpp : 定义应用程序的入口点. // #include "framework.h" #include "resource_stud ...
- Rocket - devices - TLZero
https://mp.weixin.qq.com/s/JHjUZncEcoZpRxIS1ECV5g 简单介绍TLZero的实现. 1. /dev/null /dev/null最主要的特点是写入的数据被 ...
- 前端HTML 定位position 绝对定位 相对定位
>>>position:absolute;绝对定位 当前元素相对于父级元素位置[该父级元素必须也设定了position,不然会继续往上找祖先元素,直到body为止]的定位 >& ...
- ASP.NET中IHttpHandler与IHttpModule的区别(带样例说明)
IHttpModule相对来说,是一个网页的添加 IHttpHandler相对来说,却是网页的替换 先建一个HandlerDemo的类 using System; using System.Colle ...
- CSDN怎么跳转到指定的位置
位置1 只需要给上面的链接和下面的id一致即可 位置1
- Java实现 LeetCode 87 扰乱字符串
87. 扰乱字符串 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = "great" 的一种可能的表示形式. grea ...