自动化处理浏览器任务

栏目: 编程工具 · 发布时间: 6年前

内容简介:在日常工作当中,我们经常会和浏览器打交道,当然就可能会在浏览器上做一些重复、无脑的工作,这篇文章旨在对于这类问题出一个基于脚本的统一化解决方案。一句话概括,首先,在拥有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模拟都不模拟了,自己干脆直接驱动浏览器,这样几乎不会被反爬 工具 监测到;

脑洞再大一些,甚至还可以写网页版游戏的外挂等等。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

断点:互联网进化启示录

断点:互联网进化启示录

[美]杰夫·斯蒂贝尔 / 师蓉 / 中国人民大学出版社有限公司 / 2014-11-1 / CNY 49.00

一部神经学、生物学与互联网技术大融合的互联网进化史诗巨著。 我们正置身网络革命中。互联网的每一丝变化都与你我息息相关。当科技变得无处不在时,它就会改变你我。在《断点》一书中,大脑科学家和企业家杰夫·斯蒂贝尔将带领读者来到大脑、生物与技术的交汇处,向读者展示生物学和神经学是如何与互联网技术发生联系的;我们是如何通过生物学上的前车之鉴,来预测互联网的发展的;互联网在经历增长、断点和平衡后又会发生......一起来看看 《断点:互联网进化启示录》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具