JAVA、Python、selenium、问卷星自动脚本

项目地址

https://gitee.com/Hardy1/questionnaire-star-script

前期准备

  1. 配置jdk
  2. 安装python
  3. 下载安装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)

项目配置

  1. 打开”问卷星自动脚本“项目,设置好maven、jdk等配置

  2. 打开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文件中,并保存

  3. 在mitmproxy/bin/目录下terminal执行一次mitmdump后关闭terminal

  4. 在C:/User/Username/.mitmproxy文件中双击”mitmproxy-ca.p12“开始导入证书,选择默认下一步就好,但是记得在证书储存的时候不要选择默认的选项,要将证书储存在受信任的根证书颁发机构

  5. 导入证书完成后,在…/mitmproxy/bin/路径下打开terminal,输入命令:mitmdump -s porperties.py启动mitmproxy

  6. 打开”问卷星自动脚本“项目中的start包中的mainrun类中设置好定时任务(不太清楚spring boot中怎么直接执行一个方法)并运行,就可以开始自动跑问卷了。

问题处理

常见问题

  1. 脚本跑一段时间后,统计数据数量和脚本跑的次数不同。

    原因:问卷星服务器可能屏蔽了异常的提交
    解决方案:建议放慢速度,使用IP代理软件(一般注册都会送免费时长)更改IP地址,防止拉黑IP(IP异常后过几十分钟还是可以继续提交的,不过只用本地IP的话会大大限制正常提交次数),建议出现滑动验证码时暂停程序并切换IP,虽然我已经将滑动验证码自动处理。

  2. 脚本打开网页时chrome提示链接不安全界面。

    原因:mitmproxy未安装证书

    解决方案:根据教程或者网上自己寻找教程(关键字:”mitmproxy证书“)安装证书。

  3. 脚本打开网页时无法打开网页,提示未连接到互联网。

    原因:没启动mitmdump
    解决方案:在mitmproxy安装目录下的bin目录中打开terminal执行”mitmdum -s properties.py“命令

  4. 提交问卷时显示异常

    原因:当前IP短时间内过多提交问卷,提交频繁

    解决方案:使用IP代理软件更换IP或者暂停程序过0.5-1小时重试。

其他问题

有问题可以加我qq1315364596(不常用)/微信1315364596,能帮得上的会帮帮你

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值