内容简介:在日常工作当中,我们经常会和浏览器打交道,当然就可能会在浏览器上做一些重复、无脑的工作,这篇文章旨在对于这类问题出一个基于脚本的统一化解决方案。一句话概括,首先,在拥有python环境的os中命令行执行
在日常工作当中,我们经常会和浏览器打交道,当然就可能会在浏览器上做一些重复、无脑的工作,这篇文章旨在对于这类问题出一个基于脚本的统一化解决方案。
背景
Selenium库
简要
一句话概括, Selenium 就是一个浏览器自动化测试框架。它支持包括IE、Chrome、Mozilla Firefox、Mozilla Suite在内的大多数主流浏览器。当然本文主要讲述的并不是关于它在自动化测试部分方面的运用,该部分在Selenium官网和网上各种Blog处均有很多也很详细的介绍,这里我们要说的是基于它的浏览器控制能力来演化出的另一个应用方向——自动化处理任务。
快速开始
安装
首先,在拥有 python 环境的os中命令行执行 pip install selenium 来安装Selenium库。(Mac os直接安装时可能会出现权限问题,此时尝试命令前面添加 sudo ,还不行时则需要尝试通过创建Python沙盒的方式来安装。)
其次,下载一个 跟自己浏览器和版本对应 的webdriver,然后将该文件配置在环境变量下。比如Chrome浏览器的webdriver就在 这里 下载。 这里需要注意下载的webdriver版本不是越新越好,而是要下载跟自己浏览器版本匹配的。 我首次安装时在这里踩过坑。具体查看匹配的方式是 打开Chrome => 点击菜单Chrome => 关于Google Chrome ,在该界面能看到自己浏览器的版本。然后进入在上面的下载页面找到与自己版本匹配的webdriver,具体比较的地方在此处
最后测试下是否配置正确,终端打开一个新窗口,输入命令 chromedriver -v 执行,如果配置没问题,此时便能看到webdriver的版本号,如下
➜ ~ cd Documents/libs ➜ libs chromedriver -v ChromeDriver 2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011)
快速开始
环境配置完成之后,来通过一个简单的百度搜索然后进入Selenium官网的Demo来看看Selenium的实际运行效果。新建 client_selenium.py 脚本文件,然后执行添加如下代码
# coding=utf-8
from selenium import webdriver
import time
# 创建一个webdriver实例, 并打开百度页面
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 找到搜索框组件, 并输入关键词"selenium"
element_input = browser.find_element_by_id('kw')
element_input.send_keys('selenium')
# 找到搜索按钮, 并指定点击操作
element_search = browser.find_element_by_xpath('//*[@value="百度一下"]')
element_search.click()
time.sleep(1)
# 找到selenium官网的链接, 并点击进入
element_target = browser.find_element_by_xpath('//*[contains(text(), "Web Browser Automation")]')
element_target.click()
执行该python文件后,脚本会通过webdriver来去驱动浏览器进行一系列的打开、输入、点击等操作,如下图
常用api
Selenium库具有很丰富的api,但对于只需要写任务处理脚本而言,我们只需要了解一些比较核心高频的api,下面列举出常用的api
| 操作 | api | 说明 |
|---|---|---|
| 输入 | send_keys('Hello') |
输入文本 |
| 点击 | click() |
执行点击 |
| 查找元素 | find_element_by_id() |
根据ID进查找 |
| 查找元素 | find_element_by_name() |
根据name查找 |
| 查找元素 | find_element_by_tag_name() |
根据标签查找 |
| 查找元素 | find_element_by_link_text() |
根据链接文本查找 |
| 查找元素 | find_element_by_class_name() |
根据class名查找 |
| 查找元素 | find_elements_by_css_selector() |
根据css选择器查找 |
| 查找元素 | find_elements_by_xpath() |
根据xpath语法查找 |
可以看到,其中Selenium库包含丰富的元素查找相关的api,找到对应的元素是对该元素进行操作的基础,所以能否快速、便捷、精准的查找到目标元素至关重要。
这里着重强调一下 find_elements_by_xpath 函数,该函数是基于 XPath语法规范 进行查找元素的,该规范在爬虫开发、浏览器脚本、XML配置查找等方面的使用时相当高频的。实际上,上面的所有查找方法都可以通过该方法进行替代。
应用
(略。。。)
拓展
用原生Selenium的Api写过一个应用之后,虽然感觉它的Api不算复杂,但对于我们只想写一个自动化脚本而言,还是不够简练,毕竟它的Api的初衷是给为了做浏览器自动化测试使用的。
而我想要的效果就是,更简单,尽可能一行代码执行一个Action,而一个自动化脚本就是包含多个Action的一个Robot。于是就基于Selenium库封装了很薄的一层 selenium-robot库 ,然后发布到 pypi仓库 里。
以最上面的访问Selenium官网的那个Demo来比较,用 selenium-robot 来实现出来的是这样的
from selenium_robot.actions import *
from selenium_robot import Robot
browser = webdriver.Chrome()
Robot(
Open('https://www.baidu.com'),
Input('wd', 'selenium'),
Click('百度一下'),
Click('Web Browser Automation')
).setup(browser)
代码量减少了一半多,最终运行的效果是一样的,对于自动化脚本的开发可以更加便捷、高效。
总结
总的来说,基于上面的Selenium库,我们还能开发出很多自动化脚本:
可以把工作中重复的配置操作通过该方式完成,这种工作在运营人员面前应该不少,比如要配置N个活动,每天配置广告Banner,配置公告信息等;
可以结合某些xml解析库进行爬虫开发,而且这种爬虫是基于浏览器驱动进行数据爬取的,而非像Scrapy等这种基于纯数据角度的爬虫框架一样。人家是模拟浏览器请求,Selenium模拟都不模拟了,自己干脆直接驱动浏览器,这样几乎不会被反爬 工具 监测到;
脑洞再大一些,甚至还可以写网页版游戏的外挂等等。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用浏览器的HEADLESS模式进行自动化测试
- 跨平台的浏览器自动化工具 Playwright 简析
- 跨平台的浏览器自动化工具 Playwright 简析
- 你该了解的自动化测试工具:Selenium控制浏览器的常用方法!
- CSS浏览器兼容性的4个解决方案:浏览器CSS样式初始化、浏览器私有属性,CSS hack语法和自动化插件
- [ Laravel从入门到精通 ] 测试系列 —— 在 Laravel 中基于 Dusk 实现浏览器自动化测试(一):快速入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript凌厉开发
张鑫 黄灯桥、杨彦强 / 清华大学出版社 / 2010 年4月 / 49.00元
本书详细介绍Ext JS框架体系结构,以及利用HTML/CSS/JavaScript进行前端设计的方法和技巧。作者为Ext中文站站长领衔的三个国内Ext JS先锋,在开发思维和开发经验上有着无可争议的功力。 本书包含的内容有Ext.Element.*、事件Observable、Ext组件+MVC原理、Grid/Form/Tree/ComboBox、Ajax缓存Store等,并照顾JavaSc......一起来看看 《JavaScript凌厉开发》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
HEX CMYK 转换工具
HEX CMYK 互转工具