作者 | 馬超
來源 | CSDN博客
又快到了幼兒園報名的季節了,身邊很多朋友有很多都說起要高價請槍手幫助秒殺報名的,其實幼兒園報名本質上還是一個比較簡單的任務,粗略來看這只是一個網頁爬蟲加自動答題的需求。
去年博主為孩子進行幼兒園報名時用了+的方式,效果不錯。今年我在研究R語言的過程中,發現這個看似最簡單的R語言也可以做相應的秒殺。我把相關編程的思路整理了一下,供各位參考。我盡量將全部的細節說清,對于讀者也沒有什么相應基礎的要求。
首先我們的第一大原則是要保證相應操作的安全性,純程序模擬交互的方式一旦被報名網站防護機制識破,后果將不堪設想。所以先將這種方式排除。
接下來我想到的是腳本化語言+可編程瀏覽器方式,我們知道是一個自動化的網頁測試框架。支持、Java、R語言等可編程操作的接口,同時也完全可以脫離程序控制由用戶手工操作,使用靈活。而且報名網站收到的全部信息也都是經由瀏覽器發出的,沒有觸發防護反爬機制的風險。考慮到R語言的門檻最低,所以這里以R語言為做為編程平臺以例以便為更多爬蟲初學者提供便利。
由于博主了解到很多報名網站都只支持平臺瀏覽器,所以這里就以Win平臺為例html文件能用什么打開,從零講起。
安裝R語言編程環境
1.打開網頁,點擊 R forhtml文件能用什么打開,然后再點擊 R for the first time,再點擊 R 3.5.2 for 下載R語言安裝包。
2.安裝R語言,雙擊下載的文件R-3.5.2-win.exe,最好進行全默認的安裝,如果C盤空間太小也可以改變安裝路徑。
安裝Java環境
1.下載java安裝包打開網大頁,注意在 前點擊一下,接受協議,然后選擇 64版本即可。
2.雙擊下載的文件jdk-8u201--x64.exe,全程下一步安裝即可。注意需要記錄下來安裝路徑。
3.添加環境變更。單擊“計算機-屬性-高級系統設置”,單擊“環境變量”。在“系統變量”欄下單擊“新建”,創建新的系統環境變量。
新建->變量名"",變量值"C:\Java\jdk1.8.0_05"(即JDK的安裝路徑)
編輯->變量名"Path",在原變量值的最后面加上“;%%\bin;%%\jre\bin”
新建->變量名“”,變量值“.;%%\lib;%%\lib\dt.jar;%%\lib\tools.jar”
4.驗證Java是否安裝成功:點擊開始菜單在最下方的搜索程序和文件的文本框中輸入cmd命令,進入命令行模式后,執行java -能看到正確版本即可。
安裝(可選)
由于環境沒有,到了進階篇咱們就有可能需要用到,當然本篇還不涉及的內容,所以也可略去此步。
1.打開網頁,點擊 R for ,點擊,再選擇推薦的版本.exe (),下載即可。
2.雙擊.exe,注意在 時一定要將全部的組件全部選上。
安裝
1.安裝,進入這個官網的網址是可以訪問的,直接點free 即可安裝。
2.下載并安裝插件:
(1)下載.exe和---3.9.1.jar拷貝至C:\ Files (x86)\\\即可。
(2)啟動的服務。
點擊開始菜單在最下方的搜索程序和文件的文本框中輸入cmd命令,進入命令行模式后執行:
cd?C:\Program?Files?(x86)\Google\Chrome\Application
java?-Dwebdriver.chrome.driver="chromedriver.exe"?-jar?selenium-server-standalone-3.9.1.jar
看到有“ is up and on port 4444”的返回字樣即說明安裝成功。
注意:啟動R語言環境之前請一定記得執行此步驟,保證是啟動的。
調試瀏覽器框架
1.啟動R語言編程軟件,點擊開始-所有程序-R-R x64 3.5.2即可啟動R語言。
2.進行R語言編程界面后,安裝包,在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()
這時瀏覽器會自動打開并且左上角有“正受到自動測試軟件的控制”的字樣如下圖所示。
自動信息填寫過程的簡單樣例
1.打開報名網站:咱們前文也提到了,所謂自動報名系統其實就是一個網頁爬蟲+自動回答的功能實現。以天津幼兒園的報名為例,報名網站平時并不開起,只能通過練習網頁進行練習。不過利用練網站簡單說一下秒殺流程也是可以的。
在你已經完成了之前的步驟,打開了“正受到自動測試軟件的控制”字樣的瀏覽器以后,在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$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=""]',這其中涉及一定的爬蟲知識,這句是要找一下填寫”身高“這個文本框對應的html的xpath,然后是=remDr$(using="xpath",value=xpath),這句是把這個”身高“這個文本框元素選中。
這句定義我的答案text

將你的答案自動填上$(text)
后記:
以上是這個自動報名系統的概要說明版本,有一定基礎的程序員GG估計按照這個教程做一遍最多不超過半小時,零基礎的朋友估計最多也就是需要半天的時間。
當然這個版本還沒有實現的內容:諸如身份證號以及生日日期等項目的自動填寫,而且也沒有實現針對提問方式變化而進行的自適應的功能等等。但是整體的思路和基本的搭建過程已經基本說明了。進階篇我有時間后面也會分享給大家。
原文:
【END】
熱 文推 薦
?
?
?
你點的每個“在看”,我都認真當成了喜歡