Python问卷自动填写

  • 前言
  • 一、自动填写问卷分为几步?
  • 二、具体步骤
    • 1.自动打开网页
    • 2.通过xpath实现自动点击
      • 至于怎么找xpath?
    • 3.自动填写并提交
    • 4.实现循环
  • 三、全部代码

前言

最近学校搞调研活动,需要收集问卷,还有份数要求,数量不够,自己来凑,但是手动填写有很麻烦,所以就有了这个项目。


一、自动填写问卷分为几步?

  1. 首先肯定是要实现自动打开网页自动点击,这个地方,我搜了以下,基本上都是用的selenium
  2. 是在我实现了第一步之后,发下这个问卷有反爬,检测到你是脚本运行的,提交不了,所以就要进行反反爬
  3. 就是实现循环,总不能每一份都手动点击运行对吧

二、具体步骤

1.自动打开网页

这里需要用到chrome浏览器,并且要按照插件,大家参考这个网站
代码如下(示例):

from selenium import webdriver
# 创建浏览器对象
options = webdriver.ChromeOptions()
browser = webdriver.Chrome(options=options)
# 获取待访问的网址
browser.get("https://www.wjx.cn/vm/rlW1bUm.aspx")  #根据需要填写url,即问卷链接

这个代码可以自动打开网页,不过没有反反爬,提交问卷的时候就提交不了

代码如下(反反爬):这里不讲反反爬原理,毕竟我也不太懂

from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=option)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
browser.get("https://www.wjx.cn/vm/rlW1bUm.aspx")

这样就实现了网页的打开了

2.通过xpath实现自动点击

代码如下(示例):

browser.find_element_by_xpath('//*[@id="div1"]/div[2]/div[1]/div').click()
#xpath路径:选择要点击的位置,在对应代码出右键,Copy,Copy Xpath

大家先理解这一句代码,是selenium自带的点击功能,后面的.click()就表示点击,那么你要告诉他要点击哪里呢?.find_element_by_xpath()就表示通过xpath来定位,告诉他要点击的地方的xpath,他就知道要点哪里了。

至于怎么找xpath?

在chrome浏览器中右击点检查

用这个工具点击你想要点击的地方

它会自动对应到这个位置对应的代码,对代码右击,选择Copy,选择Copy Xpath,就会自动复制Xpath,把它粘贴到.find_element_by_xpath()括号内就行了
(而且都是有规律的,你自己找找规律,哪个数字对应题目,哪个数字对应选项)

3.自动填写并提交

代码如下(示例):

from selenium import webdriver
import time     #用于休眠
import random   #用于生成随机数
import numpy as npdef write():   #定义一个函数用于自动填写、提交问卷#第一题(单选题)number = random.randint(1,3)    #生成对应选项的随机数,这里有两个选项,随机生成数字1-3if number == 1:   #随机生成的数字为1,则选择选项1browser.find_element_by_xpath(                      #xpath路径:选择要点击的位置,再对应代码出右键,Copy,Copy Xpath'//*[@id="div1"]/div[2]/div[1]/div').click()    #利用xpath路径进行寻找,再进行点击.click()操作elif number == 2:    #随机生成的数字为2,则选择选项3browser.find_element_by_xpath('//*[@id="div1"]/div[2]/div[2]/div').click()elif number == 3:    #随机生成的数字为3,则选择选项3browser.find_element_by_xpath('//*[@id="div1"]/div[2]/div[3]/div').click()#第二题(多选题)numbers = np.random.randint(4, size=2)    #生成对应选项的多个随机数,表示生成[0,5)区间内2个随机整数,可能会有重复if 1 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[1]/div').click()if 2 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[2]/div').click()if 3 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[3]/div').click()if 4 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[4]/div').click()#第三题(多选题)numbers = np.random.randint(4, size=2)if 4 in numbers:  #如果生成的随机数有4,就只选4(概率会大一点)browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[4]/div').click()elif 4 not in numbers:if 1 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[1]/div').click()if 2 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[2]/div').click()if 3 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[3]/div').click()time.sleep(1)#点击提交browser.find_element_by_xpath('//*[@id="ctlNext"]').click()time.sleep(1)#点击验证browser.find_element_by_xpath('//*[@id="alert_box"]/div[2]/div[2]/button').click()time.sleep(1)browser.find_element_by_xpath('// *[ @ id = "rectMask"]').click()time.sleep(2)

我的每一道题都是自己打的if else语句,结合生成的随机数字进行选择,好像有人就把他分成2类,单选和多选,然后自动识别题目类型和选项数字,直接调用,我这里用的是最笨的方法。

4.实现循环

代码如下(示例):

i = 0
while i < 50:  #(自定义设置问卷数量,可循环刷)url = "https://www.wjx.cn/vm/rlW1bUm.aspx"  #问卷星链接#打开问卷option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)browser = webdriver.Chrome(options=option)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.get(url)#调用函数,自动填写问卷并提交write()   time.sleep(2)  #休眠2sbrowser.close()  #填写完毕关闭页面i+=1

三、全部代码

代码如下(示例):

from selenium import webdriver  #selenium,用于网页控制
import time     #用于休眠
import random   #用于生成随机数
import numpy as npdef write():#第一题(单选题)number = random.randint(1,3)    #生成对应选项的随机数,这里有两个选项,随机生成数字1-3if number == 1:   #随机生成的数字为1,则选择选项1browser.find_element_by_xpath(                      #xpath路径:选择要点击的位置,再对应代码出右键,Copy,Copy Xpath'//*[@id="div1"]/div[2]/div[1]/div').click()    #利用xpath路径进行寻找,再进行点击.click()操作elif number == 2:    #随机生成的数字为2,则选择选项3browser.find_element_by_xpath('//*[@id="div1"]/div[2]/div[2]/div').click()elif number == 3:    #随机生成的数字为3,则选择选项3browser.find_element_by_xpath('//*[@id="div1"]/div[2]/div[3]/div').click()#第二题(多选题)numbers = np.random.randint(4, size=2)    #生成对应选项的多个随机数,表示生成[0,5)区间内2个随机整数,可能会有重复if 1 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[1]/div').click()if 2 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[2]/div').click()if 3 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[3]/div').click()if 4 in numbers:browser.find_element_by_xpath('//*[@id="div2"]/div[2]/div[4]/div').click()#第三题(多选题)numbers = np.random.randint(4, size=2)if 4 in numbers:  #如果生成的随机数有4,就只选4(概率会大一点)browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[4]/div').click()elif 4 not in numbers:if 1 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[1]/div').click()if 2 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[2]/div').click()if 3 in numbers:browser.find_element_by_xpath('//*[@id="div3"]/div[2]/div[3]/div').click()time.sleep(1)#提交browser.find_element_by_xpath('//*[@id="ctlNext"]').click()time.sleep(1)#验证browser.find_element_by_xpath('//*[@id="alert_box"]/div[2]/div[2]/button').click()time.sleep(1)browser.find_element_by_xpath('// *[ @ id = "rectMask"]').click()time.sleep(2)if __name__=='__main__':  #这个没什么作用,就是书写规范,表示运行的主函数i = 0while i < 50:  #(自定义设置问卷数量,可循环刷)url = "https://www.wjx.cn/vm/rlW1bUm.aspx"  #问卷星链接#打开问卷option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)browser = webdriver.Chrome(options=option)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.get(url)#调用函数,自动填写问卷并提交write()   time.sleep(2)  #休眠2sbrowser.close()  #填写完毕关闭页面i+=1

运行视频看这里


总的来说,运行的话可以,不过短时间内份数过多的时候,大概在5、60份时,他的验证方式会变成滑块验证,大家可以休息一段时间再刷,或者学一下怎么通过滑块验证。

python给我做500份问卷相关推荐

  1. 现在Easy Scheduler想贡献给Apache基金会,我们做了一份问卷看下大家的想法,也请大家积极参与,谢谢!

    感谢各位伙伴们长期以来的持续关注和贡献,现在Easy Scheduler想贡献给Apache基金会,我们做了一份问卷看下大家的想法,也请大家积极参与,谢谢! https://wj.qq.com/s2/ ...

  2. python实现随机抽取答题_问卷星可以随机抽取题库答题吗

    问卷星可以随机抽取题库答题吗 简介 自动填写问卷并提交 , 然后自动刷新继续填写 , 适用于问卷星 , 欢迎 Star 上个月开源了一个 Python 项目(登上过 GitHub 最流行的 中文语言 ...

  3. python爬虫能干什么-Python爬虫能做什么

    image Python是一门非常简单易学好用,同时功能强大的编程语言,具有丰富和强大的库,开发效率特别高. Python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后 ...

  4. 教你些技巧,用 Python 自动化办公做一些有趣的事情!太方便了

    不知道大家听没听过这么一句话:所有需要重复做两次的事情,都可以用程序代替我来完成. 是的,说的没错,在现在互联网飞速发展的时代,许多繁琐的事情都可以写一些代码来完成,而Python就是其中之一! 学习 ...

  5. python画气泡图_​用Python把图做的好看点:用Matplotlib画个好看的气泡图

    我们继续来把简单的图形丢到极坐标,这次是气泡图和柱状图,临摹的对象是澎湃美数课 这个图看起来很好看,原理其实很简单,把柱状图和气泡图从笛卡尔坐标系中转移到极坐标系中来就OK 我们开始本次的临摹吧 本期 ...

  6. 37岁程序员失业投500份简历就3次面试猎头:超35岁不要

    37岁程序员失业120天,投了500份简历就3次面试,猎头:超过35岁都不要 在职场中,都说互联网吃青春饭,而35岁就是一个门槛,一旦到了这个年龄找工作都非常难,甚至被公司裁员的风险都很大,其实一个现 ...

  7. 爬虫python能做什么-Python爬虫能做什么

    image Python是一门非常简单易学好用,同时功能强大的编程语言,具有丰富和强大的库,开发效率特别高. Python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后 ...

  8. 包邮再送500份!我们自制了一张【数据分析知识鼠标垫】,抓紧领取

    之前,我们自制了一款<数据分析全栈知识鼠标垫>,做了500张送给粉丝,很快就抢没了,获得了不错的反馈,来看看大家的晒图: 感谢粉丝们的口口相传,这张鼠标垫现在也算小有名气了,现在还经常有读 ...

  9. 如何做一份精致的性能测试报告

    相比于普通的功能测试,性能测试对测试工程师的技能要求更高,一般来说,也只有中高级测试工程师才会有机会做性能测试. 本文通过下面三个部分来介绍 性能测试报告的目的 性能测试过程中的关注点有哪些? 如何做 ...

最新文章

  1. SpringBoot------全局异常捕获和自定义异常
  2. mysql 的select语句_MYSQL SELECT语句新手
  3. 网易云信与极客邦科技联合,发起抗击疫情行动,百家企业贡献资源
  4. 深度学习——用softmax函数来规范可变参数
  5. UE4 FBX静态网格物体通道
  6. Matplotlib 中文用户指南 3.2 图像教程
  7. Spring Boot 使用 Dom4j XStream 操作 Xml
  8. 【笔试/面试】SQL 经典面试题
  9. 使用Microsoft Sync Framework做文件同步
  10. Weex + Ui - Weex Conf 2018
  11. Python学习笔记【第十二篇】:Python异常处理
  12. Excel VBA编程教程(基础一)
  13. 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
  14. 计算机网络第七版和课后答案百度网盘下载
  15. Web前端CSS颜色代码大全
  16. LSD_SLAM 编译、安装到运行demo
  17. 分享Canvas简笔画小程序源码
  18. 修改centos网口名称
  19. 【Python语言基础】——Python 命令行输入
  20. SpringMVC通过ResponseEntity实现文件下载

热门文章

  1. error LNK1112
  2. 2022最新独立版智狐聚合支付v1.0.5.21_聚合支付系统源码
  3. goland连接数据库
  4. MD5加密为什么不可逆?
  5. qt错误:常量中有换行符
  6. 图像分割:阈值获取方法总结
  7. Java--文件(File)
  8. 帮你快速拿Offer!Android攒了一个月的面试题及解答,含BATJM大厂
  9. 修改Github仓库中项目语言类型
  10. 谈谈在我在外包公司工作的经历