用Python实现问卷星自动填写(超详细!!!)

用Python实现问卷星自动填写(超详细!!!)

  • 前言
  • 一、配置环境
    • 1.1安装依赖
    • 1.2安装驱动
  • 二、实战处理
    • 2.1、引入库函数
    • 2.2、程序所需函数详解
      • (1)自定义单选函数
      • (2)自定义多选函数
      • (3)自定义填空函数
      • (4)自定义智能验证函数
      • (5)自定义滑块验证函数
      • (6)自定义屏幕滚动函数
      • (7)主函数
  • 三、项目整体代码
  • 四、项目修改及扩展
  • 五、总结

前言

(Ps:废话部分可跳过 )相信大家一定都有被问卷给折磨的时候,尤其去求别人填问卷的时候,如果是内向的小伙伴就一定很苦恼了,那么有没有一种工具可以帮助我们去自动填写问卷以达到问卷不求人的东西呢!答案是肯定的,我们都知道python是门很强大的语言,在自动化、人工智能、数据分析等领域有着举足轻重的作用,所以在这里我们选择用python来实现。

一、配置环境

1.1安装依赖

①这里我们需要用到python的库函数——selenium库,这是帮助我们去爬取网页信息和处理网页的重要工具。也是我们本次实现程序所用到的库,直接在选择好的环境下执行
pip install selenium。
②我们还需要用到pyautogui库函数去模拟人手点击或拖拽来进行智能验证,也是在对应的环境执行
pip install pyautogui。

pip install selenium
pip install pyautogui

1.2安装驱动

执行本次程序是在谷歌浏览器下完成的,所以在此之前请下载谷歌浏览器(谷歌浏览器下载地址)。
下好浏览器就可以去下载驱动了,在这之前我们还需做一步,打开已经安装好的谷歌浏览器,查看自己的浏览器版本。
点击设置
在这里插入图片描述
到这里我们就可以下载谷歌驱动了(Chrome驱动链接),点击进去找到对应的版本号,如果没有对应的版本号下载接近的一个即可,如下版本里面没有我的111.0.5563.65的版本,我们下载111.0.0.5563.64的即可(Ps:如果发现在后面打不开驱动出现错误,换一个驱动再试一下,因为这里有些人是要小一点的版本可以,有些人是大一点的版本可以)。
在这里插入图片描述
下载好是一个压缩吧,解压完成后是一个.exe文件,可以放在任意的一个文件夹,只要能找到即可,我这里选择的是放在安装好的谷歌浏览器文件夹下。
在这里插入图片描述

二、实战处理

2.1、引入库函数

这里我们引入所要用到的库函数及对应的包

from selenium.webdriver.common.by import By  # 没有selenium库的(请在所用的环境下pip install selenium)
from selenium import webdriver  #selenium库
import random  # 用于产生随机数
import time  # 用于延时
import pyautogui  # 用于模拟人手

2.2、程序所需函数详解

(1)自定义单选函数

当问卷中有单选就可以直接查询到问卷中的所有单选进行自动答题。

def danxuan(driver):# 找到所有标签(定位问题)这里是单选dan = driver.find_elements_by_css_selector('#div1 > div.ui-controlgroup.column1')for answer in dan:ans = answer.find_elements_by_css_selector('.ui-radio')#对应的绝对子标签random.choice(ans).click()  # 找到标签并点击time.sleep(random.randint(0, 1))

(2)自定义多选函数

寻找问卷中第几题是多选,就可自动去答多选中的题。

def duoxuan(driver):#这里是多选题,找到所有多选的标签duo = driver.find_elements_by_css_selector('#div2 > div.ui-controlgroup.column1')for answer in duo:ans = answer.find_elements_by_css_selector('.ui-checkbox')#对应的绝对子标签#随机填几次for i in range(1, 7):#这里的7可以改成5,10,12random.choice(ans).click()#找到标签并点击time.sleep(random.randint(0, 1))

(3)自定义填空函数

需要自己去定义第几题是填空并填上自己想要填写的内容。
如果要修改可这样改,例子:index里的数量一定要对应answer里的数量,index的名字可以跟answer不一样
index = [“1”, “2”, “B”, “D”]
answer = {“1”: “python真的好用!”, “2”: “这个测试很成功!”, “B”: “填空题随机填写文本”,“D”: “随便填写!”}

def tiankong(driver, num):#填空函数#这里是所需要问题的标签汇总,例如有四个要答的问题,下面的answer的ABC数量需要跟index里面的数量相等index = ["A", "B", "C"]# 自定义要回答的答案answer = {"A": "python真的好用!", "B": "这个测试很成功!", "C": "填空题随机填写文本"}driver.find_element(by=By.CSS_SELECTOR, value=f'#q{num}')\.send_keys(answer.get(index[random.randint(0, len(index)-1)]))

(4)自定义智能验证函数

当出现智能验证的时候,用自定义的这个函数可以帮我们解决。

def renzheng(driver):# 智能验证,找到智能认证的标签bth = driver.find_element_by_css_selector('#layui-layer1 > div.layui-layer-btn.layui-layer-btn- > a.layui-layer-btn0')bth.click()#点击time.sleep(1)rectBottom = driver.find_element_by_css_selector('#rectBottom') #提交按钮rectBottom.click() #点击time.sleep(5)

(5)自定义滑块验证函数

当填写问卷次数过多,这时智能验证之后还会出现滑块验证,这时候就需要滑块验证函数帮我们解决。

def huakuai():# 当次数多了的时候就会出现滑块,这里是模拟人手解决滑块拖动pyautogui.moveTo(random.randint(494, 496), 791, 0.2)#控制鼠标移动到x,y处,耗时0.2秒time.sleep(1)pyautogui.dragTo(random.randint(888, 890), 791, 1)#让鼠标点击并拖拽到x,y处,耗时1秒time.sleep(1)pyautogui.click(random.randint(652, 667), random.randint(793, 795))#让鼠标点击x,y处time.sleep(1)pyautogui.moveTo(random.randint(494, 496), 791, 0.2)#控制鼠标移动到x,y处,耗时0.2秒time.sleep(1)pyautogui.dragTo(random.randint(888, 890), 791, 1)#让鼠标点击并拖拽到x,y处,耗时1秒

(6)自定义屏幕滚动函数

当问卷中的题数量多的时候,由于答题过快,屏幕没有滑动,这时会被检测出是机器人,就会提交失败,所以我们还需要一个自定义屏幕滑动函数来帮我们解决屏幕滚动问题。

def gundong(driver, distance): #用于屏幕滚动#测算出最大的距离根据电脑屏幕分辨率而异,一般填写400到800,800是最大滑动距离js = "var q=document.documentElement.scrollTop=" + str(distance)    driver.execute_script(js)time.sleep(0.5)

(7)主函数

def zonghe(times):for i in range(0, times):# 初始配置,地址url_survey = 'https://www.wjx.cn/vm/hiQpVeR.aspx'option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)# 本地下载的谷歌浏览器地址option.binary_location = r'D:\Goole_Local\Google\Chrome\Application\chrome.exe'# 下载好的Chrome驱动的地址driver = webdriver.Chrome(r"D:\Goole_Local\Google\Chrome\Application\chromedriver.exe", options=option)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})# 启动要填写的地址driver.get(url_survey)danxuan(driver) #调用单选函数duoxuan(driver) #调用多选函数gundong(driver, 600)#调用滚动屏幕函数,如果不需要则注释掉#调用填空题函数,这个3代表的意思是第三题是填空题,如果有其他填空题需要去完成再调用tiankong(driver, num)即可#举例:第八题也是填空题,这时我们加上tiankong(driver, 8)tiankong(driver, 3)# 最后交卷点击提交#time.slee()函数是表示延时的意思,里面可以放固定值也可以放随机数,这里我放的是随机数。time.sleep(random.randint(0, 1))driver.find_element_by_css_selector('#ctlNext').click()#找到提交的css并点击time.sleep(4)renzheng(driver)#智能认证函数调用huakuai()#滑块函数调用print('已经提交了{}次问卷'.format(int(i) + int(1)))time.sleep(4)driver.quit()#停止

三、项目整体代码

from selenium.webdriver.common.by import By  # 没有selenium库的(请在所用的环境下pip install selenium)
from selenium import webdriver  #selenium库
import random  # 用于产生随机数
import time  # 用于延时
import pyautogui  # 用于模拟人手def gundong(driver, distance): #延时+屏幕滚动js = "var q=document.documentElement.scrollTop=" + str(distance)    #下拉像素(800是基于最顶端测算的距离)driver.execute_script(js)time.sleep(0.5)def danxuan(driver):# 找到所有标签(定位问题)这里是单选dan = driver.find_elements_by_css_selector('#div1 > div.ui-controlgroup.column1')for answer in dan:ans = answer.find_elements_by_css_selector('.ui-radio')#对应的绝对子标签random.choice(ans).click()  # 找到标签并点击time.sleep(random.randint(0, 1))def duoxuan(driver):#这里是多选题,找到所有多选的标签duo = driver.find_elements_by_css_selector('#div2 > div.ui-controlgroup.column1')for answer in duo:ans = answer.find_elements_by_css_selector('.ui-checkbox')#对应的绝对子标签#随机填几次for i in range(1, 7):#这里的7可以改成5,10,12random.choice(ans).click()#找到标签并点击time.sleep(random.randint(0, 1))def tiankong(driver, num):#填空函数#这里是所需要问题的标签汇总,例如有四个要答的问题,下面的answer的ABC数量需要跟index里面的数量相等index = ["A", "B", "C"]# 自定义要回答的答案answer = {"A": "python真的好用!", "B": "这个测试很成功!", "C": "填空题随机填写文本"}driver.find_element(by=By.CSS_SELECTOR, value=f'#q{num}')\.send_keys(answer.get(index[random.randint(0, len(index)-1)]))def renzheng(driver):# 智能验证,找到智能认证的标签bth = driver.find_element_by_css_selector('#layui-layer1 > div.layui-layer-btn.layui-layer-btn- > a.layui-layer-btn0')bth.click()#点击time.sleep(1)rectBottom = driver.find_element_by_css_selector('#rectBottom') #提交按钮rectBottom.click() #点击time.sleep(5)def huakuai():# 当次数多了的时候就会出现滑块,这里是模拟人手解决滑块拖动pyautogui.moveTo(random.randint(494, 496), 791, 0.2)#控制鼠标移动到x,y处,耗时0.2秒time.sleep(1)pyautogui.dragTo(random.randint(888, 890), 791, 1)#让鼠标点击并拖拽到x,y处,耗时1秒time.sleep(1)pyautogui.click(random.randint(652, 667), random.randint(793, 795))#让鼠标点击x,y处time.sleep(1)pyautogui.moveTo(random.randint(494, 496), 791, 0.2)#控制鼠标移动到x,y处,耗时0.2秒time.sleep(1)pyautogui.dragTo(random.randint(888, 890), 791, 1)#让鼠标点击并拖拽到x,y处,耗时1秒def zonghe(times):for i in range(0, times):# 初始配置,地址url_survey = 'https://www.wjx.cn/vm/hiQpVeR.aspx'option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)# 本地下载的谷歌浏览器地址option.binary_location = r'D:\Goole_Local\Google\Chrome\Application\chrome.exe'# 下载好的Chrome驱动的地址driver = webdriver.Chrome(r"D:\Goole_Local\Google\Chrome\Application\chromedriver.exe", options=option)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})# 启动要填写的地址driver.get(url_survey)danxuan(driver) #调用单选函数duoxuan(driver) #调用多选函数gundong(driver, 600)#调用滚动屏幕函数,如果不需要则注释掉tiankong(driver, 3)#调用填空题函数# 最后交卷点击提交time.sleep(random.randint(0, 1))driver.find_element_by_css_selector('#ctlNext').click()#找到提交的css并点击time.sleep(4)renzheng(driver)#智能认证函数调用huakuai()#滑块函数调用print('已经提交了{}次问卷'.format(int(i) + int(1)))time.sleep(4)driver.quit()#停止if __name__ == "__main__":zonghe(2)#里面填写的数是表示要提交多少次问卷

四、项目修改及扩展

如果上面的代码发现跟自己问卷星对不上且无法打开怎么办,别慌!这里教你怎么修改代码
①这里我们用谷歌浏览器打开所需要填写的问卷星地址,然后用电脑上的F12打开开发者模式
在这里插入图片描述
②这里我们可以选用快捷键CTRL+SHIFT+C启动元素检查或者点击我下图标注的地方来进行选择到题号
在这里插入图片描述
③然后我们再查看选择题项的位置在哪里,然后我们就可以知道地方,再选择复制CSS地址就可以得到要修改的地方了
在这里插入图片描述
在这里插入图片描述
④复制完之后我们可以看到得到的是什么,这里得到的就是单选题的大标签

#div1 > div.ui-controlgroup.column1

再接着我们就可以看到各个小标签
在这里插入图片描述
⑤然后我们就可以修改我们的代码了

def danxuan(driver):'''找到所有标签(定位问题)这里是单选,注意我们使用的是find.elements_by_CSS_selector()这样得到的是一个列表,里面包含了所有的选择题,将我们得到的大标签填入如下再修改我们所需要选择的小标签,注意小标签填写的时候前面要加 .(点,如:.ui-radio)这是代表选择题的绝对路径,这样选择单选的时候就不会错误。'''dan = driver.find_elements_by_css_selector('#div1 > div.ui-controlgroup.column1')for answer in dan:ans = answer.find_elements_by_css_selector('.ui-radio')#对应的绝对子标签random.choice(ans).click()  # 找到标签并点击time.sleep(random.randint(0, 1))

多选题和填空题也是一样,看代码相信大家一定能看懂,这里就不过多展示了

这里用的是CSS的方式,其实在项目中可以选择ID查找,XPATH路径去查找都可以,博客里面也有很多资料,都万变不离其宗,找到对应的标签即可。

 driver.find_element_by_xpath('//*[@id="div1"]/div[2]/div[1]') 这是用XPATH得到的简单解释一下里面的值含义吧//*[@id="div1"]/div[2]/div[1]第一个div1表示的是第一题,第二个div[2]表示的是第二大部分是选择题,第三个div[1]表示的是选择第一个。那么你一定能看懂这个XPATH是什么意思  //*[@id="div2"]/div[2]/div[2]这里表示的是第二题选择题第二个。

五、总结

python的selenium库是个很重要的网页处理函数库,在处理动态网页上扮演者很重要的角色,一般我们所看到的网页都可以用里面对应方法来完成,只要理解到标签的含义,其实做这类的题是很简单的,这里就是想起前面那段时间填写问卷的时候,所以有感写下这篇文章和方法,但是实际上如果是去比赛的做市场调研之类的,还是不要用这种方式,毕竟真人的感觉选择和机器的随机选择出入还是很大的,在信度分析和效度分析很可能就会垮掉,创作不易,望各位看官给赞再走!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动填写问卷星并提交

自动填写问卷星并提交 鉴于好多小伙伴要做数据分析的时候发放大量的问卷,但收回来的却寥寥无几,还受到其他小伙伴的冷眼,所以在下决定通过代码的方式,来实现问卷星的自动填写并提交。 以谷歌浏览器为例 1.随便到一个页面&#x…

【python】自动填写问卷星问卷及提交

前言:问卷是很好的网络调查方式之一,近年来,问卷星被广泛应用于各方面的调查。本文介绍了利用python代码自动填写问卷星基本题目,拥有自动填写、解决智能验证、批量提交问卷等功能。 目录 1.下载浏览器驱动 2. selenium基本配置…

利用GoogleTampermonkeyModify Headers实现问卷星调查问卷的自动填写提交

前言 首先一个月没有更新博客,是因为去苏州尝试了一下暑假工,然后对于大家在博客留下的评论和问题也没有来得及回复,实在不好意思。不得不说,暑假工挺累的,而且基本上在消磨时间,说实话也不算后悔&#xf…

Python实现问卷星调查问卷自动填写

文章目录 前言一、配置环境1.1 下载依赖selenium1.2 安装chrome驱动1.3 引入库 二、简易版快速上手教程1.自定义变量2.自定以函数3 主函数编写 三 逐步解析1 基础代码2 实现步骤 四 代码总结 前言 如何使用python实现对问卷的自动填写提交任务并且还能解决智能验证问题。 一、…

Mac 软件出现「意外退出」及「打不开」解决方法

解决方法 方法其实有很多种,这里介绍常用的几种 终端法需先安装Xcode或Apple命令行工具 如未装Xcode可以使用下列命令安装Apple命令行工具(如安装有Xcode可忽略) xcode-select --install 1.终端法 sudo codesign --force --deep --sign -…

postman能正常打开但不显示窗口

1.最近使用postman偶尔出现以下问题 postman在任务栏能正常打开,如下图,使用AltTab也能看到,但是窗口就是显示不了 2.解决方案 将鼠标放在任务栏上,使用快捷键Alt空格,弹出小窗口,然后点击弹框中的最大化…

MPAndroidChart的HorizontalBarChart数值显示不全问题

现在使用的版本是:v3.1.0 方案一: private HorizontalBarChart hor_bar_chart; hor_bar_chart(HorizontalBarChart) findViewById(R.id.hor_barchart); YAxis leftYAxishor_bar_chart.getAxisLeft(); // 设置y轴边距,解决数值过大显示不全问…

解决 echarts 图中 tooltip 文本内容太长导致显示不全

问题: 使用 tooltip 的 extraCssText,高效方便 tooltip: {show:true,trigger: "axis",confine: true, // 文本太长自动换行extraCssText: white-space: normal; word-break: break-all;, // 文本太长自动换行效果:

CoordinatorLayout显示不全问题

问题一 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"android:layout_width"match_parent"android:layout_height&…

在html中页面不全,网页显示不全,教您网页显示不全怎么办

当我们在电脑系统中使用IE浏览器浏览网页时&#xff0c;偶尔会出现是否只查看安全内容的提示&#xff0c;甚至有可能会出现页面显示不全的情况。一般遇到这种情况会选择继续查看网页内容&#xff0c;怎么去处理&#xff1f;下面&#xff0c;小编给大家介绍网页显示不全的解决步…

CSS问题:导航栏设置通栏后,放大页面背景显示不全

问题描述&#xff1a; 正常显示时&#xff1a;将网页放大到150%后&#xff1a; 解决办法&#xff1a; 当导航栏设置为width:100%或不给宽&#xff0c;是相当于当前文档流而言的&#xff0c;也就是浏览器窗口的大小。 此时假设浏览器窗口大小为1000px&#xff0c;那么这个通栏…

关于小程序 input 组件内容显示不全(显示的长度不满 input 宽度)问题

今天在做表单的提交&#xff0c;其中input框出现了一个诡异的问题&#xff0c;就是内容显示不全&#xff08;显示的长度不满 input 宽度&#xff09;&#xff0c;用前愆訾的文章解决&#xff0c;地址http://www.cnblogs.com/miu-key/p/7168933.html。感谢博主~ 转载自&#xff…

wkwebview html5页面,WKWebView h5 页面显示不全问题

WKWebView h5 页面显示不全问题 首先先来看一下效果图如下所示: 1.png 2.png 图 1 下面的分享按钮只显示出一点, 当时想出现这样的 bug 无外乎两点 1.h5 那边设备兼容问题 2.ios 这边显示问题, 问了 h5, 说是直接加载底部的 CSS 样式, 安卓那边显示 OK, 最后看了 h5 的代码也没…

html玩游戏显示不全,客户端登录界面显示不全解决办法

《新天堂II》客户端登录界面显示不全解决办法 在登录《新天堂II》游戏过程正&#xff0c;如果您出现客户端TCLS 界面显示不完全问题&#xff0c;请按照以下步骤设置&#xff0c;进行解决。 双击游戏图标后&#xff0c;出现登录界面显示不完全&#xff0c;如下图&#xff0c;玩家…

layUI的页面显示不全解决方法

在做项目时页面显示不全 可以在layui的css中直接改属性 layui-tab-item 找到这个属性&#xff0c;直接修改高度&#xff0c;如果是谷歌浏览器的话记得清缓存。 还有就是在嵌入时修改属性 <iframe scrolling"no" frameborder"0" src" " wid…

昆仑万维CEO方汉:AIGC以低成本达到80分水平,腰部工作者将大概率被淘汰 | 中国AIGC产业峰会...

丰色 发自 凹非寺量子位 | 公众号 QbitAI “如果人类的水平达不到80分&#xff0c;就会被AI淘汰。” 在中国AIGC产业峰会现场&#xff0c;昆仑万维CEO方汉抛出这样一个大胆预测。 在他看来&#xff0c;目前AIGC对存量知识的理解与表达已经达到80分的水平&#xff0c;行业从业者…

《扬帆优配》交易拥挤度达历史极值 当前A股TMT板块性价比几何?

上周&#xff0c;A股商场企稳&#xff0c;但盘面风格分歧再度加深&#xff1a;很多资金涌入以ChatGPT、数字经济为代表的TMT板块&#xff0c;而新能源以及前期强势的“中字头”种类都呈现了回调。兴业证券计算显现&#xff0c;3月24日&#xff0c;TMT及电子板块的商场成交金额占…

当初急吼吼冲进来的老王们,已经撤了……撤了……

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在“刘教链Pro”发表了《内参&#xff1a;为何要在31k对15k后悔莫及&#xff1f;》&#xff0c;欢迎关注公众号“刘教链Pro”并阅读。 * * * 坊间消息&#xff0c;几个月前高调带资5000万美刀入场、“all in” AI的王…