当前位置: 首页>编程语言>正文

python 自动填写问卷星问卷 问卷星自动填写脚本python

项目地址

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文件中,并保存

  1. 在mitmproxy/bin/目录下terminal执行一次mitmdump后关闭terminal
  2. 在C:/User/Username/.mitmproxy文件中双击”mitmproxy-ca.p12“开始导入证书,选择默认下一步就好,但是记得在证书储存的时候不要选择默认的选项,要将证书储存在受信任的根证书颁发机构中
  3. 导入证书完成后,在…/mitmproxy/bin/路径下打开terminal,输入命令:mitmdump -s porperties.py启动mitmproxy
  4. 打开”问卷星自动脚本“项目中的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小时重试。


https://www.xamrdz.com/lan/5vy1924846.html

相关文章: