论文部分内容阅读
摘 要 论文以图书馆VPN账号的自动审核为例,介绍了WebDriver在图书馆业务操作自动化中的应用。实践证明,通过引入WebDriver自动化技术不仅能够大幅提高工作效率,还提升了用户体验和满意度。论文探讨了该技术在图书馆的广阔应用前景,并提供了Github案例全部的演示视频以及完整的源代码。
关键词 账号自动审核 WebDriver 图书馆自动化
分类号 G250.7
DOI 10.16810/j.cnki.1672-514X.2018.02.015
Using WebDriver to Implement the Automation of Business in Library: Taking Auto-verification of VPN Accounts for Example
Hou Zhijiang
Abstract Taking the automatic verification of VPN account as an example, this paper introduces the application of WebDriver in the automation of library business. In practice, it has proved that WebDriver raises the efficiency greatly and improves users’ experience and satisfaction. Then, this paper discusses some promising use case of this technology in library, and provides both the demo video and all related source code of Github.
Keywords Account auto-verification. WebDriver. Automation of library.
0 背景
为了方便师生在校外访问图书馆电子资源,笔者所在图书馆使用了某VPN远程访问系统。出于安全考虑,图书馆需要验证用户的真实身份,为此,图书馆安排专职人员进行账号申请者的身份验证。这项业务的流程是,先由用户自助注册申请账号,然后等待图书馆馆员审核,审核通过后账号即可生效使用。这一流程看似没有问题,但随着时间的推移,时效性问题逐步凸显出来。考虑到周末和节假日,图书馆给读者的承诺是三天内完成账号审核,但在实际中要求专职馆员加大账号审核处理频次,每天务必处理三次。而最近的一次读者调查结果显示,这项服务是读者对图书馆服务最不满意的一项服务,理由是等待审核的时间太长了,尤其是遇上周末,一等就得两三天。进一步调查访谈发现,原来很多读者想到使用校外访问VPN系统时,多数是在一些比较着急的情况下,例如科研中突然需要用到一篇文献,或者在家中突然有一个思路想要验证等等,所以漫长的等待让用户觉得难以接受。要解決这个问题,光靠加大人工审核频次是不行的。为了提高用户满意度,必须依靠自动化技术。沿着这一思路,笔者开始探寻一种能够实现Web操作自动化的技术,用机器来弥补人工的不足。最终,笔者发现WebDriver自动化技术,能成功完成VPN账号自动审核任务,达到良好效果。
1 WebDriver简介
WebDriver全称Selenium WebDriver,是知名软件自动化测试框架Selenium[1]的最新版本,代表了目前最先进的现代Web程序自动化测试技术。在本研究中,笔者对软件自动化测试领域的技术加以借鉴和整合,将其应用到图书馆Web业务操作的自动化中来。
WebDriver的工作原理如图1所示。WebDriver的核心是一组与浏览器交互通讯的接口和协议,使得外部程序能够通过这一标准编程接口与任何遵循该协议的浏览器直接进行交互,从而绕过鼠标、键盘等用户交互设备,直接向浏览器发出各种操作指令。目前大多数主流的浏览器例如IE、FireFox、Chrome等均支持WebDriver,各自都提供有WebDriver驱动程序。
图1中的箭头方向描述了WebDriver程序工作的流程。以点击网页中的按钮为例,可以更加清楚地描述其工作原理:用户在Python程序中指出要执行点击动作的按钮及其标识参数,SDK(Software Development Kit)软件包将高级语言翻译成底层WebDriver协议的通讯指令,通知给浏览器的WebDriver驱动程序(例如Firefox驱动程序),驱动程序再指示Firefox浏览器执行命令,最后,由浏览器在内核中对相应的按钮进行点击操作,最终的效果与用户使用鼠标在页面上点击该按钮的效果完全相同。除Python语言外,WebDriver官方还提供了Java、Ruby等多种编程语言的软件开发工具包,为用户提供了更加简单方便的面向对象的编程接口[2]。
从文献来看,过去有研究人员尝试使用操作系统底层编程[3]和鼠标键盘操作记录器(例如按键精灵[4])两种方法来实现Web操作自动化,但这两种方法由于通用性和兼容性较差,一直难以得到广泛的推广和应用。与过去Web业务自动化技术相比,WebDriver具有较为显著的优势,具体为:(1) 功能丰富而强大。WebDriver的各项功能都是浏览器厂商原生支持并实现的,所以几乎所有的用户交互操作,例如鼠标单击、双击、滚动、拖拽、键盘输入等都可以通过WebDriver接口来完成。而且,WebDriver还可以与外部编程语言无缝结合,可以在页面环境中执行JavaScript脚本,使得其功能更加灵活强大,基本可实现所有常见的Web网页交互操作。(2) 学习曲线平滑。WebDriver官方提供了多种便捷的软件开发工具包,用户可以任选一种自己熟悉的语言进行开发。经过封装的编程接口与自然语言十分接近,初学者可以快速上手。(3) 技术方案成熟,稳定可靠。WebDriver被全球软件企业广泛应用,在自动化软件测试领域颇为知名,其可靠性得到了充分的验证,有着丰富的技术资料和帮助文档。 2 实现方案描述
在本研究中,笔者使用Python语言进行编程开发,通过FirefoxDriver驱动Firefox浏览器执行VPN账号审核操作。账号自动审核程序的基本流程图如图2所示。图中虚线框包围的部分表示通过调用WebDriver接口完成的功能,框外部分则是使用Python代码自行实现的程序业务逻辑。
从图2中可以看出,程序的主框架是一个大循环。通过该循环,程序每隔1分钟(间隔时间值可自定义)登录一次后台账号管理系统,检查是否有待审核账号。如果有,则提取注册信息,然后根据自定义的审核逻辑进行判别,决定是否通过审核,通过则调用WebDriver模拟点击“审核通过”按钮,没有通过则模拟点击“拒绝申请”按钮。在此过程中,WebDriver的核心操作主要包括“读取用户注册信息”和“模拟点击操作按钮”两个。笔者在下文将以这两个核心操作为例,介绍程序的关键实现原理。
(1) 读取用户注册信息。以读取注册用户的姓名为例。首先需要通过分析网页结构布局来定位“姓名”所在的网页元素。WebDriver提供了多种方式来定位网页元素,这里以XPath方式为例。XPath是一种用来描述HTML文档中元素位置的语言,HTML是一种树形结构的文档,而XPath类似于描述元素“地址”的语言。例如“姓名”字段元素的XPath位置为“html/body/div[2]/div/form/table/tbody/tr[1]/td[2]”,则可以通过以下Python程序代码来获取姓名的字符串值。
# 创建一个WebDriver对象
driver = webdriver.Firefox();
# 打开操作页面
driver.get(siteURL);
# 根據元素的XPath定位元素对象
nameXPath=“html/body/div[2]/div/form/table/tbody/tr[1]/td[2]”;
nameElement=driver.find_element_by_xpath (nameXPath);
#通过元素对象的text属性,读出“姓名”字段值
name = nameElement.text;
通过类似的方法,即可获得注册用户的各种信息,例如借阅证号码、学院、用户类型等其它信息。这些信息将作为审核逻辑的输入参数。审核逻辑与WebDriver的使用无关,是用户根据业务规则自定义的函数,只要基于这些输入信息,做出是否通过审核的判断决策即可。
(2) 模拟点击操作按钮。正如读取注册信息所示,WebDriver在执行交互操作时基本都遵循先定位元素,后调用操作函数的步骤。点击“审核通过”按钮,也需要先定位该按钮在页面中的位置。除了使用XPath外,WebDriver还支持通过id标识符、链接文字、标签名、CSS选择器等多种方式来确定元素的位置,具体可查看WebDriver手册文档[2]。例如,可以通过链接文字“审核通过”来查找定位该按钮,然后调用单击click()方法,来实现“审核通过”按钮的模拟点击。具体Python源代码如下:
#创建一个WebDriver对象
driver = webdriver.Firefox();
#打开操作页面
driver.get(siteURL);
# 通过按钮上的链接文字来定位按钮元素
passButton=driver.find_element_by_link_text (“审核通过”) ;
#调用元素对象的click()函数,模拟完成点击操作。
passButton.click();
以上两个基本操作涵盖了WebDriver的核心功能,也正是账号自动审核程序的关键部分。除此之外,还有一个细节的地方值得特别说明并引起读者注意:WebDriver代码采用异步执行方式,在执行下一条语句时,前一条语句并不一定已经完成并产生结果。所以在打开新页面,或者代码操作引起页面变化时,需要酌情进行一定时间的等待,通常调用Python中的sleep语句将线程挂起若干秒,等待页面完成刷新,即可解决这一问题。
3 实践效果及前景
笔者使用上述方案,实现了图书馆VPN账号的自动审核,程序运行的界面可参考笔者提供的程序演示视频[5]。
在程序投入使用后,收到了较好的效果。首先,大幅提高了审核效率,账号审核的最长时滞由过去的三天缩短到一分钟,而且7*24小时全天候无节假日实时自动审核,极大地提升了用户体验。在2015年12月到2016年6月程序试运行的这段时间里,统计数据显示,98%的注册账号能够通过自动审核,达到了账号实时生效的效果。与此同时,节省了大量人力,减轻了馆员的工作负担,馆员只需定期处理少量未通过自动审核的用户,提醒他们注意修改注册资料即可,从而使馆员能够抽出时间来从事其它更深层次的工作。总之,VPN账号审核的自动化,不仅得到了师生用户的一致好评,还得到了馆员的欢迎和赞许。
这项自动化技术具有普适性,在Web业务日益普及的今天,WebDriver在图书馆潜在的应用场景也越来越多。例如,可以借助WebDriver进行文献自动传递、进行电子资源可用性的自动监测、学科动态新闻的自动跟踪和抓取等等。现阶段,我国图书馆的业务有较大的相似性和类同性,试想如果能够进一步建立一个全国范围的WebDriver自动化脚本共享交流平台,将极大地提高国内图书馆的工作效率和服务质量。
当前的图书馆有不少类似的需要人工去做的重复性业务工作,效率和用户体验都存在较大的提升空间。本文旨在将WebDriver自动化方案介绍给国内广大同仁,期待能引起广大图书馆技术人员对WebDriver自动化技术的关注和重视,同时也希望大家可以举一反三,思考并尝试实现日常业务的自动化,进一步推进图书馆服务的优化和升级。为此,笔者将本课题的源代码全部放在Github网站开放下载[6],希望能够为大家自主开发提供一个基础框架。
参考文献:
Selenium Project. Selenium WebDriver[EB/OL].[2015-06-12].http://www.seleniumhq.org/projects/webdriver/.
WebDriver Python Bindings. API Documentation[EB/OL].[2015-07-10].http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html.
朱玉强.图书馆电子资源可否浏览及下载监测程序设计[J].现代图书情报技术,2013(11):86-90.
按键精灵.鼠标键盘模拟器[EB/OL].[2015-7-12].http://www.anjian.com/.
侯志江.图书馆账号自动审核演示视频[EB/OL].
[2015-09-21].http://v.youku.com/v_show/id_XMTM0MTE5MDEyMA==.html.
Github. WebDriver开发指引[EB/OL].[2015-09-21].
https://github.com/tjut/auto-audit.
关键词 账号自动审核 WebDriver 图书馆自动化
分类号 G250.7
DOI 10.16810/j.cnki.1672-514X.2018.02.015
Using WebDriver to Implement the Automation of Business in Library: Taking Auto-verification of VPN Accounts for Example
Hou Zhijiang
Abstract Taking the automatic verification of VPN account as an example, this paper introduces the application of WebDriver in the automation of library business. In practice, it has proved that WebDriver raises the efficiency greatly and improves users’ experience and satisfaction. Then, this paper discusses some promising use case of this technology in library, and provides both the demo video and all related source code of Github.
Keywords Account auto-verification. WebDriver. Automation of library.
0 背景
为了方便师生在校外访问图书馆电子资源,笔者所在图书馆使用了某VPN远程访问系统。出于安全考虑,图书馆需要验证用户的真实身份,为此,图书馆安排专职人员进行账号申请者的身份验证。这项业务的流程是,先由用户自助注册申请账号,然后等待图书馆馆员审核,审核通过后账号即可生效使用。这一流程看似没有问题,但随着时间的推移,时效性问题逐步凸显出来。考虑到周末和节假日,图书馆给读者的承诺是三天内完成账号审核,但在实际中要求专职馆员加大账号审核处理频次,每天务必处理三次。而最近的一次读者调查结果显示,这项服务是读者对图书馆服务最不满意的一项服务,理由是等待审核的时间太长了,尤其是遇上周末,一等就得两三天。进一步调查访谈发现,原来很多读者想到使用校外访问VPN系统时,多数是在一些比较着急的情况下,例如科研中突然需要用到一篇文献,或者在家中突然有一个思路想要验证等等,所以漫长的等待让用户觉得难以接受。要解決这个问题,光靠加大人工审核频次是不行的。为了提高用户满意度,必须依靠自动化技术。沿着这一思路,笔者开始探寻一种能够实现Web操作自动化的技术,用机器来弥补人工的不足。最终,笔者发现WebDriver自动化技术,能成功完成VPN账号自动审核任务,达到良好效果。
1 WebDriver简介
WebDriver全称Selenium WebDriver,是知名软件自动化测试框架Selenium[1]的最新版本,代表了目前最先进的现代Web程序自动化测试技术。在本研究中,笔者对软件自动化测试领域的技术加以借鉴和整合,将其应用到图书馆Web业务操作的自动化中来。
WebDriver的工作原理如图1所示。WebDriver的核心是一组与浏览器交互通讯的接口和协议,使得外部程序能够通过这一标准编程接口与任何遵循该协议的浏览器直接进行交互,从而绕过鼠标、键盘等用户交互设备,直接向浏览器发出各种操作指令。目前大多数主流的浏览器例如IE、FireFox、Chrome等均支持WebDriver,各自都提供有WebDriver驱动程序。
图1中的箭头方向描述了WebDriver程序工作的流程。以点击网页中的按钮为例,可以更加清楚地描述其工作原理:用户在Python程序中指出要执行点击动作的按钮及其标识参数,SDK(Software Development Kit)软件包将高级语言翻译成底层WebDriver协议的通讯指令,通知给浏览器的WebDriver驱动程序(例如Firefox驱动程序),驱动程序再指示Firefox浏览器执行命令,最后,由浏览器在内核中对相应的按钮进行点击操作,最终的效果与用户使用鼠标在页面上点击该按钮的效果完全相同。除Python语言外,WebDriver官方还提供了Java、Ruby等多种编程语言的软件开发工具包,为用户提供了更加简单方便的面向对象的编程接口[2]。
从文献来看,过去有研究人员尝试使用操作系统底层编程[3]和鼠标键盘操作记录器(例如按键精灵[4])两种方法来实现Web操作自动化,但这两种方法由于通用性和兼容性较差,一直难以得到广泛的推广和应用。与过去Web业务自动化技术相比,WebDriver具有较为显著的优势,具体为:(1) 功能丰富而强大。WebDriver的各项功能都是浏览器厂商原生支持并实现的,所以几乎所有的用户交互操作,例如鼠标单击、双击、滚动、拖拽、键盘输入等都可以通过WebDriver接口来完成。而且,WebDriver还可以与外部编程语言无缝结合,可以在页面环境中执行JavaScript脚本,使得其功能更加灵活强大,基本可实现所有常见的Web网页交互操作。(2) 学习曲线平滑。WebDriver官方提供了多种便捷的软件开发工具包,用户可以任选一种自己熟悉的语言进行开发。经过封装的编程接口与自然语言十分接近,初学者可以快速上手。(3) 技术方案成熟,稳定可靠。WebDriver被全球软件企业广泛应用,在自动化软件测试领域颇为知名,其可靠性得到了充分的验证,有着丰富的技术资料和帮助文档。 2 实现方案描述
在本研究中,笔者使用Python语言进行编程开发,通过FirefoxDriver驱动Firefox浏览器执行VPN账号审核操作。账号自动审核程序的基本流程图如图2所示。图中虚线框包围的部分表示通过调用WebDriver接口完成的功能,框外部分则是使用Python代码自行实现的程序业务逻辑。
从图2中可以看出,程序的主框架是一个大循环。通过该循环,程序每隔1分钟(间隔时间值可自定义)登录一次后台账号管理系统,检查是否有待审核账号。如果有,则提取注册信息,然后根据自定义的审核逻辑进行判别,决定是否通过审核,通过则调用WebDriver模拟点击“审核通过”按钮,没有通过则模拟点击“拒绝申请”按钮。在此过程中,WebDriver的核心操作主要包括“读取用户注册信息”和“模拟点击操作按钮”两个。笔者在下文将以这两个核心操作为例,介绍程序的关键实现原理。
(1) 读取用户注册信息。以读取注册用户的姓名为例。首先需要通过分析网页结构布局来定位“姓名”所在的网页元素。WebDriver提供了多种方式来定位网页元素,这里以XPath方式为例。XPath是一种用来描述HTML文档中元素位置的语言,HTML是一种树形结构的文档,而XPath类似于描述元素“地址”的语言。例如“姓名”字段元素的XPath位置为“html/body/div[2]/div/form/table/tbody/tr[1]/td[2]”,则可以通过以下Python程序代码来获取姓名的字符串值。
# 创建一个WebDriver对象
driver = webdriver.Firefox();
# 打开操作页面
driver.get(siteURL);
# 根據元素的XPath定位元素对象
nameXPath=“html/body/div[2]/div/form/table/tbody/tr[1]/td[2]”;
nameElement=driver.find_element_by_xpath (nameXPath);
#通过元素对象的text属性,读出“姓名”字段值
name = nameElement.text;
通过类似的方法,即可获得注册用户的各种信息,例如借阅证号码、学院、用户类型等其它信息。这些信息将作为审核逻辑的输入参数。审核逻辑与WebDriver的使用无关,是用户根据业务规则自定义的函数,只要基于这些输入信息,做出是否通过审核的判断决策即可。
(2) 模拟点击操作按钮。正如读取注册信息所示,WebDriver在执行交互操作时基本都遵循先定位元素,后调用操作函数的步骤。点击“审核通过”按钮,也需要先定位该按钮在页面中的位置。除了使用XPath外,WebDriver还支持通过id标识符、链接文字、标签名、CSS选择器等多种方式来确定元素的位置,具体可查看WebDriver手册文档[2]。例如,可以通过链接文字“审核通过”来查找定位该按钮,然后调用单击click()方法,来实现“审核通过”按钮的模拟点击。具体Python源代码如下:
#创建一个WebDriver对象
driver = webdriver.Firefox();
#打开操作页面
driver.get(siteURL);
# 通过按钮上的链接文字来定位按钮元素
passButton=driver.find_element_by_link_text (“审核通过”) ;
#调用元素对象的click()函数,模拟完成点击操作。
passButton.click();
以上两个基本操作涵盖了WebDriver的核心功能,也正是账号自动审核程序的关键部分。除此之外,还有一个细节的地方值得特别说明并引起读者注意:WebDriver代码采用异步执行方式,在执行下一条语句时,前一条语句并不一定已经完成并产生结果。所以在打开新页面,或者代码操作引起页面变化时,需要酌情进行一定时间的等待,通常调用Python中的sleep语句将线程挂起若干秒,等待页面完成刷新,即可解决这一问题。
3 实践效果及前景
笔者使用上述方案,实现了图书馆VPN账号的自动审核,程序运行的界面可参考笔者提供的程序演示视频[5]。
在程序投入使用后,收到了较好的效果。首先,大幅提高了审核效率,账号审核的最长时滞由过去的三天缩短到一分钟,而且7*24小时全天候无节假日实时自动审核,极大地提升了用户体验。在2015年12月到2016年6月程序试运行的这段时间里,统计数据显示,98%的注册账号能够通过自动审核,达到了账号实时生效的效果。与此同时,节省了大量人力,减轻了馆员的工作负担,馆员只需定期处理少量未通过自动审核的用户,提醒他们注意修改注册资料即可,从而使馆员能够抽出时间来从事其它更深层次的工作。总之,VPN账号审核的自动化,不仅得到了师生用户的一致好评,还得到了馆员的欢迎和赞许。
这项自动化技术具有普适性,在Web业务日益普及的今天,WebDriver在图书馆潜在的应用场景也越来越多。例如,可以借助WebDriver进行文献自动传递、进行电子资源可用性的自动监测、学科动态新闻的自动跟踪和抓取等等。现阶段,我国图书馆的业务有较大的相似性和类同性,试想如果能够进一步建立一个全国范围的WebDriver自动化脚本共享交流平台,将极大地提高国内图书馆的工作效率和服务质量。
当前的图书馆有不少类似的需要人工去做的重复性业务工作,效率和用户体验都存在较大的提升空间。本文旨在将WebDriver自动化方案介绍给国内广大同仁,期待能引起广大图书馆技术人员对WebDriver自动化技术的关注和重视,同时也希望大家可以举一反三,思考并尝试实现日常业务的自动化,进一步推进图书馆服务的优化和升级。为此,笔者将本课题的源代码全部放在Github网站开放下载[6],希望能够为大家自主开发提供一个基础框架。
参考文献:
Selenium Project. Selenium WebDriver[EB/OL].[2015-06-12].http://www.seleniumhq.org/projects/webdriver/.
WebDriver Python Bindings. API Documentation[EB/OL].[2015-07-10].http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html.
朱玉强.图书馆电子资源可否浏览及下载监测程序设计[J].现代图书情报技术,2013(11):86-90.
按键精灵.鼠标键盘模拟器[EB/OL].[2015-7-12].http://www.anjian.com/.
侯志江.图书馆账号自动审核演示视频[EB/OL].
[2015-09-21].http://v.youku.com/v_show/id_XMTM0MTE5MDEyMA==.html.
Github. WebDriver开发指引[EB/OL].[2015-09-21].
https://github.com/tjut/auto-audit.