JAVA、Python、selenium、问卷星自动脚本
項(xiàng)目地址
https://gitee.com/Hardy1/questionnaire-star-script
前期準(zhǔn)備
代碼實(shí)現(xiàn)
-
項(xiàng)目中service包中的auto_service是主運(yùn)行邏輯代碼,其他包中的代碼一般無(wú)需更改
-
auto_service中的代碼從注釋”答卷邏輯start“到”答卷邏輯end“是對(duì)應(yīng)問(wèn)卷的答題邏輯處理
其中int 的i1,i2,i3之類的數(shù)據(jù)是為了確定選擇哪個(gè)選項(xiàng)
boolean類型的數(shù)據(jù)是為了對(duì)多選題中的每個(gè)選項(xiàng)進(jìn)行隨機(jī)選取,true為選擇,false為不選擇,當(dāng)多選題所有選項(xiàng)都是false也就是不選擇時(shí),指定選擇一個(gè)選項(xiàng)或者隨機(jī)選擇一個(gè)(防止出現(xiàn)都不選的情況而不符合答題要求),我代碼中指定選擇最后一個(gè)選項(xiàng)。
if (b20_1==false && b20_2==false && b20_3==false && b20_4==false && b20_5==false){//選擇第五個(gè)選項(xiàng)driver.findElement(By.xpath("//*[@id=\"div20\"]/div[2]/div[5]/span")).click();} -
對(duì)于xpath中引用變量的代碼,說(shuō)明這個(gè)地方的變量可以決定具體要選擇的選項(xiàng)(邏輯代碼中的int、Boolean類型的代碼都是隨即出來(lái)的,所以腳本跑出來(lái)的數(shù)據(jù)具有隨機(jī)性,無(wú)法應(yīng)用于真正的數(shù)據(jù)分析中。)
-
tools包中的seleniumAPI類中,需要自定義chrome driver的本地路徑,建議直接放在C盤根目錄下,就不用動(dòng)我的默認(rèn)位置了。不過(guò)也可以自定義,我默認(rèn)的驅(qū)動(dòng)路徑是C:/chromedriver.exe(注意,每個(gè)系統(tǒng)中的路徑分隔符不同,在java中應(yīng)當(dāng)寫作:C:\\chromedriver.exe)
項(xiàng)目配置
打開(kāi)”問(wèn)卷星自動(dòng)腳本“項(xiàng)目,設(shè)置好maven、jdk等配置
打開(kāi)mitmproxy安裝路徑,在…/mitmproxy/bin/中新建一個(gè)python文件,名字可以隨便起,我這邊用的名字是properties.py,內(nèi)如如下
TARGET_URL = 'https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html' INJECT_TEXT = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});' #js執(zhí)行文件def response(flow):if flow.request.url.startswith(TARGET_URL):flow.response.text = INJECT_TEXT + flow.response.textprint('注入成功')if 'um.js' in flow.request.url or '115.js' in flow.request.url:# 屏蔽selenium檢測(cè)flow.response.text = flow.response.text + INJECT_TEXT把上面所有代碼復(fù)制到properties.py文件中,并保存
在mitmproxy/bin/目錄下terminal執(zhí)行一次mitmdump后關(guān)閉terminal
在C:/User/Username/.mitmproxy文件中雙擊”mitmproxy-ca.p12“開(kāi)始導(dǎo)入證書,選擇默認(rèn)下一步就好,但是記得在證書儲(chǔ)存的時(shí)候不要選擇默認(rèn)的選項(xiàng),要將證書儲(chǔ)存在受信任的根證書頒發(fā)機(jī)構(gòu)中
導(dǎo)入證書完成后,在…/mitmproxy/bin/路徑下打開(kāi)terminal,輸入命令:mitmdump -s porperties.py啟動(dòng)mitmproxy
打開(kāi)”問(wèn)卷星自動(dòng)腳本“項(xiàng)目中的start包中的mainrun類中設(shè)置好定時(shí)任務(wù)(不太清楚spring boot中怎么直接執(zhí)行一個(gè)方法)并運(yùn)行,就可以開(kāi)始自動(dòng)跑問(wèn)卷了。
問(wèn)題處理
常見(jiàn)問(wèn)題
腳本跑一段時(shí)間后,統(tǒng)計(jì)數(shù)據(jù)數(shù)量和腳本跑的次數(shù)不同。
原因:問(wèn)卷星服務(wù)器可能屏蔽了異常的提交
解決方案:建議放慢速度,使用IP代理軟件(一般注冊(cè)都會(huì)送免費(fèi)時(shí)長(zhǎng))更改IP地址,防止拉黑IP(IP異常后過(guò)幾十分鐘還是可以繼續(xù)提交的,不過(guò)只用本地IP的話會(huì)大大限制正常提交次數(shù)),建議出現(xiàn)滑動(dòng)驗(yàn)證碼時(shí)暫停程序并切換IP,雖然我已經(jīng)將滑動(dòng)驗(yàn)證碼自動(dòng)處理。
腳本打開(kāi)網(wǎng)頁(yè)時(shí)chrome提示鏈接不安全界面。
原因:mitmproxy未安裝證書
解決方案:根據(jù)教程或者網(wǎng)上自己尋找教程(關(guān)鍵字:”mitmproxy證書“)安裝證書。
腳本打開(kāi)網(wǎng)頁(yè)時(shí)無(wú)法打開(kāi)網(wǎng)頁(yè),提示未連接到互聯(lián)網(wǎng)。
原因:沒(méi)啟動(dòng)mitmdump
解決方案:在mitmproxy安裝目錄下的bin目錄中打開(kāi)terminal執(zhí)行”mitmdum -s properties.py“命令
提交問(wèn)卷時(shí)顯示異常
原因:當(dāng)前IP短時(shí)間內(nèi)過(guò)多提交問(wèn)卷,提交頻繁
解決方案:使用IP代理軟件更換IP或者暫停程序過(guò)0.5-1小時(shí)重試。
其他問(wèn)題
有問(wèn)題可以加我qq1315364596(不常用)/微信1315364596,能幫得上的會(huì)幫幫你
總結(jié)
以上是生活随笔為你收集整理的JAVA、Python、selenium、问卷星自动脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab 三相桥式全控整流电路
- 下一篇: python ipados_iPadOS