拿来就能用!用爬虫秒抢到孩子心仪的幼儿园 - CSDN 博文精选

网络空间安全

作者

   马超

  来源

   CSDN博客

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

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

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

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

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

安装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盘空间太小也可以改变安装路径。

安装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.添加环境变更。单击“计算机-属性-高级系统设置”,单击“环境变量”。在“系统变量”栏下单击“新建”,创建新的系统环境变量。

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

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

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

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

安装Rtools(可选)

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

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

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

安装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是启动的。

调试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正受到自动测试软件的控制”的字样如下图所示。

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

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

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

  url=http://yey.bapuec.org/start

  remDr$navigate(url)2.进行等待界面:这时浏览器上会显示一个等待界面如下图:

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

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

  4.进入正式报名界面

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

  xpath=//*[@id="Height_ID"]

  nextEle=remDr$findElement(using="xpath",value=xpath)

  text <- list(98)

  nextEle$sKeysToElement(text)

  xpath=//*[@id="Weight_ID"]

  nextEle=remDr$findElement(using="xpath",value=xpath)

  text <- list(26)

  nextEle$sKeysToElement(text)

  xpath=//*[@id="CSD_ID"]

  nextEle=remDr$findElement(using="xpath",value=xpath)

  text <- list(天津市河大区)

  nextEle$sKeysToElement(text)

  xpath=//*[@id="RM_ID"]

  nextEle=remDr$findElement(using="xpath",value=xpath)

  text <- list(大晨晨)

  nextEle$sKeysToElement(text)接下来你再返回浏览器就会发现神奇的一幕出现了,信息可以按照预先设置好的方式被填上云。

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

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

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

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

  后记:

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

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

  原文:

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

  【】

标签: 网络空间安全