640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 马超

来源 | CSDN博客

又快到了幼儿园报名的季节了,身边很多朋友有很多都说起要高价请枪手帮助秒杀报名的,其实幼儿园报名本质上还是一个比较简单的任务,粗略来看这只是一个网页爬虫加自动答题的需求。

去年博主为孩子进行幼儿园报名时用了Selenium+Python的方式,效果不错。今年我在研究R语言的过程中,发现这个看似最简单的R语言也可以做相应的秒杀。我把相关编程的思路整理了一下,供各位参考。我尽量将全部的细节说清,对于读者也没有什么相应基础的要求。

首先我们的第一大原则是要保证相应操作的安全性,纯程序模拟交互的方式一旦被报名网站防护机制识破,后果将不堪设想。所以先将这种方式排除。

接下来我想到的是脚本化语言+可编程浏览器方式,我们知道Selenium是一个自动化的网页测试框架。支持Python、Java、R语言等可编程操作的接口,同时Selenium也完全可以脱离程序控制由用户手工操作,使用灵活。而且报名网站收到的全部信息也都是经由浏览器发出的,没有触发防护反爬机制的风险。考虑到R语言的门槛最低,所以这里以R语言为做为编程平台以例以便为更多爬虫初学者提供便利。

由于博主了解到很多报名网站都只支持Windows平台浏览器,所以这里就以Win平台为例,从零讲起。


640?wx_fmt=png

安装R语言编程环境


1.打开网页https://mirrors.tuna.tsinghua.edu.cn/CRAN/,点击Download R for Windows,然后再点击install R for the first time,再点击Download R 3.5.2 for Windows下载R语言安装包。

2.安装R语言,双击下载的文件R-3.5.2-win.exe,最好进行全默认的安装,如果C盘空间太小也可以改变安装路径。


640?wx_fmt=png

安装Java环境


1.下载java安装包打开网大页https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,注意在Accept License Agreement前点击一下,接受协议,然后选择Windows 64版本即可。

2.双击下载的文件jdk-8u201-windows-x64.exe,全程下一步安装即可。注意需要记录下来安装路径。

3.添加环境变更。单击“计算机-属性-高级系统设置”,单击“环境变量”。在“系统变量”栏下单击“新建”,创建新的系统环境变量。

  1. 新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径) 

  2. 编辑->变量名"Path",在原变量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin” 

  3. 新建->变量名“CLASSPATH”,变量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”

4.验证Java是否安装成功:点击开始菜单在最下方的搜索程序和文件的文本框中输入cmd命令,进入命令行模式后,执行java -version能看到正确版本即可。


640?wx_fmt=png

安装Rtools(可选)


由于Windows环境没有,到了进阶篇咱们就有可能需要用到Rtools,当然本篇还不涉及Rtools的内容,所以也可略去此步。

1.打开网页https://mirrors.tuna.tsinghua.edu.cn/CRAN/,点击Download R for Windows,点击Rtools,再选择推荐的版本Rtools35.exe (recommended),下载即可。

2.双击Rtools35.exe,注意在select component时一定要将全部的组件全部选上。


640?wx_fmt=png

安装Selenium


1.安装chrome,进入https://chrome.en.softonic.com/这个官网的网址是可以访问的,直接点free download即可安装。

2.下载并安装Selenium插件:

(1)下载chromedriver_win32.exe和selenium-server-standalone-3.9.1.jar拷贝至C:\Program Files (x86)\Google\Chrome\Application即可。

(2)启动Selenium的Docker服务。

点击开始菜单在最下方的搜索程序和文件的文本框中输入cmd命令,进入命令行模式后执行:

cd C:\Program Files (x86)\Google\Chrome\Application
java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.9.1.jar
看到有“Selenium Server is up and running on port 4444”的返回字样即说明安装成功。

注意:启动R语言环境之前请一定记得执行此步骤,保证selenium是启动的。


640?wx_fmt=png

调试Selenium浏览器框架


1.启动R语言编程软件,点击开始-所有程序-R-R x64 3.5.2即可启动R语言。

2.进行R语言编程界面后,安装Rselenium包,在R语言环境中执行

 
 
install.packages('RSelenium'
3.安装爬虫包rvest和httr,在R语言环境中执行
 
 
 
 

install.packages('rvest')
install.packages('httr')

4 .启动可编程浏览器 在R语言环境中执行:
library(RSelenium)
library(rvest)
remDr <- remoteDriver(
  browserName = "chrome",
  remoteServerAddr = "localhost",
  port = 4444L
)
remDr$open()
这时浏览器会自动打开 并且左上角有“chrome正受到自动测试软件的控制”的字样如下图所示。


640?wx_fmt=png

自动信息填写过程的简单样例


1.打开报名网站:咱们前文也提到了,所谓自动报名系统其实就是一个网页爬虫+自动回答的功能实现。以天津幼儿园的报名为例,报名网站平时并不开起,只能通过练习网页进行练习。不过利用练网站简单说一下秒杀流程也是可以的。

在你已经完成了之前的步骤,打开了“chrome正受到自动测试软件的控制”字样的浏览器以后,在R语言环境中运行以后代码。

 
 
url='http://yey.bapuec.org/start'
remDr$navigate(url)
2.进行等待界面:这时浏览器上会显示一个等待界面如下图:

640?wx_fmt=png

3.输入验证码:然后会让你输入验证码,如下图所示:

640?wx_fmt=png

注:以笔者个人的经验看,填写验证码的步骤,强烈建议使用人工输入的方式进行,使用自动图像识别的验证插件往往欲速而不达。

4.进入正式报名界面

640?wx_fmt=png

这时返回R语言编程界面运行如下代码:

xpath='//*[@id="Height_ID"]'
nextEle=remDr$findElement(using="xpath",value=xpath)
text <- list('98')
nextEle$sendKeysToElement(text)
xpath='//*[@id="Weight_ID"]'
nextEle=remDr$findElement(using="xpath",value=xpath)
text <- list('26')
nextEle$sendKeysToElement(text)
xpath='//*[@id="CSD_ID"]'
nextEle=remDr$findElement(using="xpath",value=xpath)
text <- list('天津市河大区')
nextEle$sendKeysToElement(text)
xpath='//*[@id="RM_ID"]'
nextEle=remDr$findElement(using="xpath",value=xpath)
text <- list('大晨晨')
nextEle$sendKeysToElement(text)
接下来你再返回浏览器就会发现神奇的一幕出现了,信息可以按照预先设置好的方式被填上云。

简单讲解一下这些代码的含义:

首先是xpath='//*[@id="Height_ID"]',这其中涉及一定的爬虫知识,这句是要找一下填写”身高“这个文本框对应的html的xpath,然后是nextEle=remDr$findElement(using="xpath",value=xpath),这句是把这个”身高“这个文本框元素选中。

这句定义我的答案text <- list('98')

将你的答案自动填上nextEle$sendKeysToElement(text)

后记:

以上是这个自动报名系统的概要说明版本,有一定基础的程序员GG估计按照这个教程做一遍最多不超过半小时,零基础的朋友估计最多也就是需要半天的时间。

当然这个版本还没有实现的内容:诸如身份证号以及生日日期等项目的自动填写,而且也没有实现针对提问方式变化而进行的自适应的功能等等。但是整体的思路和基本的搭建过程已经基本说明了。进阶篇我有时间后面也会分享给大家。

原文:

https://blog.csdn.net/BEYONDMA/article/details/87902276

【END】

640?wx_fmt=jpeg

640?wx_fmt=png

 热 文 推 荐 

☞ 今日头条 7 年,好的算法还可以做什么?

为何敲代码,学好数学很重要?

网易云音乐工程师,亲自揭晓消息队列改造之路! | 技术头条

90 后程序员薪资大揭秘:有人刚毕业年薪 200 万,有人月薪不足 1 万

一文读懂Bakkt:加密货币的纽交所

学阿里中台,80%的人只学到了皮毛!揭秘阿里中台的12个架构思维和原则

☞ 真正适合小白的教程:Python有什么用?数据化运营怎么做?

中科院、百度研究院等联合提出UGAN,生成图片难以溯源

为什么雷军说“华为不懂研发”?

640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢
Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐