python给我做500份问卷
Python问卷自动填写
- 前言
- 一、自动填写问卷分为几步?
- 二、具体步骤
- 1.自动打开网页
- 2.通过xpath实现自动点击
- 至于怎么找xpath?
- 3.自动填写并提交
- 4.实现循环
- 三、全部代码
前言
最近学校搞调研活动,需要收集问卷,还有份数要求,数量不够,自己来凑,但是手动填写有很麻烦,所以就有了这个项目。
一、自动填写问卷分为几步?
- 首先肯定是要实现自动打开网页,自动点击,这个地方,我搜了以下,基本上都是用的
selenium
- 是在我实现了第一步之后,发下这个问卷有反爬,检测到你是脚本运行的,提交不了,所以就要进行反反爬
- 就是实现循环,总不能每一份都手动点击运行对吧
二、具体步骤
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份问卷相关推荐
- 现在Easy Scheduler想贡献给Apache基金会,我们做了一份问卷看下大家的想法,也请大家积极参与,谢谢!
感谢各位伙伴们长期以来的持续关注和贡献,现在Easy Scheduler想贡献给Apache基金会,我们做了一份问卷看下大家的想法,也请大家积极参与,谢谢! https://wj.qq.com/s2/ ...
- python实现随机抽取答题_问卷星可以随机抽取题库答题吗
问卷星可以随机抽取题库答题吗 简介 自动填写问卷并提交 , 然后自动刷新继续填写 , 适用于问卷星 , 欢迎 Star 上个月开源了一个 Python 项目(登上过 GitHub 最流行的 中文语言 ...
- python爬虫能干什么-Python爬虫能做什么
image Python是一门非常简单易学好用,同时功能强大的编程语言,具有丰富和强大的库,开发效率特别高. Python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后 ...
- 教你些技巧,用 Python 自动化办公做一些有趣的事情!太方便了
不知道大家听没听过这么一句话:所有需要重复做两次的事情,都可以用程序代替我来完成. 是的,说的没错,在现在互联网飞速发展的时代,许多繁琐的事情都可以写一些代码来完成,而Python就是其中之一! 学习 ...
- python画气泡图_用Python把图做的好看点:用Matplotlib画个好看的气泡图
我们继续来把简单的图形丢到极坐标,这次是气泡图和柱状图,临摹的对象是澎湃美数课 这个图看起来很好看,原理其实很简单,把柱状图和气泡图从笛卡尔坐标系中转移到极坐标系中来就OK 我们开始本次的临摹吧 本期 ...
- 37岁程序员失业投500份简历就3次面试猎头:超35岁不要
37岁程序员失业120天,投了500份简历就3次面试,猎头:超过35岁都不要 在职场中,都说互联网吃青春饭,而35岁就是一个门槛,一旦到了这个年龄找工作都非常难,甚至被公司裁员的风险都很大,其实一个现 ...
- 爬虫python能做什么-Python爬虫能做什么
image Python是一门非常简单易学好用,同时功能强大的编程语言,具有丰富和强大的库,开发效率特别高. Python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后 ...
- 包邮再送500份!我们自制了一张【数据分析知识鼠标垫】,抓紧领取
之前,我们自制了一款<数据分析全栈知识鼠标垫>,做了500张送给粉丝,很快就抢没了,获得了不错的反馈,来看看大家的晒图: 感谢粉丝们的口口相传,这张鼠标垫现在也算小有名气了,现在还经常有读 ...
- 如何做一份精致的性能测试报告
相比于普通的功能测试,性能测试对测试工程师的技能要求更高,一般来说,也只有中高级测试工程师才会有机会做性能测试. 本文通过下面三个部分来介绍 性能测试报告的目的 性能测试过程中的关注点有哪些? 如何做 ...
最新文章
- SpringBoot------全局异常捕获和自定义异常
- mysql 的select语句_MYSQL SELECT语句新手
- 网易云信与极客邦科技联合,发起抗击疫情行动,百家企业贡献资源
- 深度学习——用softmax函数来规范可变参数
- UE4 FBX静态网格物体通道
- Matplotlib 中文用户指南 3.2 图像教程
- Spring Boot 使用 Dom4j XStream 操作 Xml
- 【笔试/面试】SQL 经典面试题
- 使用Microsoft Sync Framework做文件同步
- Weex + Ui - Weex Conf 2018
- Python学习笔记【第十二篇】:Python异常处理
- Excel VBA编程教程(基础一)
- 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
- 计算机网络第七版和课后答案百度网盘下载
- Web前端CSS颜色代码大全
- LSD_SLAM 编译、安装到运行demo
- 分享Canvas简笔画小程序源码
- 修改centos网口名称
- 【Python语言基础】——Python 命令行输入
- SpringMVC通过ResponseEntity实现文件下载