项目地址
https://gitee.com/Hardy1/questionnaire-star-script
前期准备
- 配置jdk
- 安装python
- 下载安装mitmproxy
代码实现
-
项目中service包中的auto_service是主运行逻辑代码,其他包中的代码一般无需更改
-
auto_service中的代码从注释”答卷逻辑start“到”答卷逻辑end“是对应问卷的答题逻辑处理
其中int 的i1,i2,i3之类的数据是为了确定选择哪个选项
boolean类型的数据是为了对多选题中的每个选项进行随机选取,true为选择,false为不选择,当多选题所有选项都是false也就是不选择时,指定选择一个选项或者随机选择一个(防止出现都不选的情况而不符合答题要求),我代码中指定选择最后一个选项。
if (b20_1==false && b20_2==false && b20_3==false && b20_4==false && b20_5==false){ //选择第五个选项 driver.findElement(By.xpath("//*[@id=\"div20\"]/div[2]/div[5]/span")).click(); }
-
对于xpath中引用变量的代码,说明这个地方的变量可以决定具体要选择的选项(逻辑代码中的int、Boolean类型的代码都是随即出来的,所以脚本跑出来的数据具有随机性,无法应用于真正的数据分析中。)
-
tools包中的seleniumAPI类中,需要自定义chrome driver的本地路径,建议直接放在C盘根目录下,就不用动我的默认位置了。不过也可以自定义,我默认的驱动路径是C:/chromedriver.exe(注意,每个系统中的路径分隔符不同,在java中应当写作:C:\\chromedriver.exe)
项目配置
-
打开”问卷星自动脚本“项目,设置好maven、jdk等配置
-
打开mitmproxy安装路径,在…/mitmproxy/bin/中新建一个python文件,名字可以随便起,我这边用的名字是properties.py,内如如下
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执行文件 def response(flow): if flow.request.url.startswith(TARGET_URL): flow.response.text = INJECT_TEXT + flow.response.text print('注入成功') if 'um.js' in flow.request.url or '115.js' in flow.request.url: # 屏蔽selenium检测 flow.response.text = flow.response.text + INJECT_TEXT
把上面所有代码复制到properties.py文件中,并保存
-
在mitmproxy/bin/目录下terminal执行一次mitmdump后关闭terminal
-
在C:/User/Username/.mitmproxy文件中双击”mitmproxy-ca.p12“开始导入证书,选择默认下一步就好,但是记得在证书储存的时候不要选择默认的选项,要将证书储存在受信任的根证书颁发机构中
-
导入证书完成后,在…/mitmproxy/bin/路径下打开terminal,输入命令:mitmdump -s porperties.py启动mitmproxy
-
打开”问卷星自动脚本“项目中的start包中的mainrun类中设置好定时任务(不太清楚spring boot中怎么直接执行一个方法)并运行,就可以开始自动跑问卷了。
问题处理
常见问题
-
脚本跑一段时间后,统计数据数量和脚本跑的次数不同。
原因:问卷星服务器可能屏蔽了异常的提交
解决方案:建议放慢速度,使用IP代理软件(一般注册都会送免费时长)更改IP地址,防止拉黑IP(IP异常后过几十分钟还是可以继续提交的,不过只用本地IP的话会大大限制正常提交次数),建议出现滑动验证码时暂停程序并切换IP,虽然我已经将滑动验证码自动处理。 -
脚本打开网页时chrome提示链接不安全界面。
原因:mitmproxy未安装证书
解决方案:根据教程或者网上自己寻找教程(关键字:”mitmproxy证书“)安装证书。
-
脚本打开网页时无法打开网页,提示未连接到互联网。
原因:没启动mitmdump
解决方案:在mitmproxy安装目录下的bin目录中打开terminal执行”mitmdum -s properties.py“命令 -
提交问卷时显示异常
原因:当前IP短时间内过多提交问卷,提交频繁
解决方案:使用IP代理软件更换IP或者暂停程序过0.5-1小时重试。
其他问题
有问题可以加我qq1315364596(不常用)/微信1315364596,能帮得上的会帮帮你