Python自动化问卷填写-问卷星(含完整代码)

目录

  • 一、环境安装
  • 二、代码分析
    • (一)库的引用
    • (二)驱动的运行
    • (三)各类题型的程序
    • (四)主程序(根据问卷客制)
  • 三、完整代码

由于网上的问卷星填写代码良莠不齐,搜索半天也没有一个可以正常运行,故发奋图强,手撕Python,脚踏问卷星,从此问卷不愁!!!

请遵纪守法,勿用于任何不正当位置!!!

本文已修改,解决了运行过程中或报错的问题!

一、环境安装

在这里插入图片描述
本次实战需要用到numpyrandomtimeselenium库,关于库的安装,大家可以自行百度,如有需要可以反馈告知,博主尽量出一期有关库的安装与简单使用实战分析!

重点!!! 大家自行在 chrome://settings/help 查看自己电脑上安装的的chrome版本
在这里插入图片描述
并在https://registry.npmmirror.com/binary.html?path=chromedriver/网站下载对应版本的chromedriver,如果不是对应版本,程序会报错!!!

二、代码分析

(一)库的引用

import numpy
import random
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

(二)驱动的运行

def Chrome(url):# 实例化一个启动参数对象chrome_options = Options()# 添加启动参数chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/79.0.3945.130 Safari/537.36"')  # 添加请求头chrome_options.add_argument('--disable-blink-features=AutomationControlled')# 防止被识别chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 设置开发者模式启动chrome_options.add_experimental_option('useAutomationExtension', False)  # 关闭selenium对chrome driver的自动控制# chrome_options.minimize_window()  # 网页最大化,已经无法使用# chrome_options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错chrome_options.add_argument('headless')  # 设置浏览器以无界面方式运行browser = webdriver.Chrome(options=chrome_options)  # 设置驱动程序,启动浏览器  (实现以特定参数启动)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})  # 用来执行Chrome开发这个工具命令browser.get(url)  # 获取问卷信息(此处填问卷链接)return browser

(三)各类题型的程序

  1. 单选题
def One_choice(num, sum, *args):# sum是总共有多少选项 num是题号if len(args) != 0:js = "document.getElementById(\"q" + str(num) + "_" + str(args[0]) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(args[0]) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)else:randomId = random.randint(1, sum)  # 随机点击第一个选项或第二个选项# js实现方式js = "document.getElementById(\"q" + str(num) + "_" + str(randomId) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(randomId) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.2)  # 延时 太快会被检测是脚本
  1. 多选题
def Multiple_choices(num, sum, *args):# num是总共有多少选项type = bool(len(args))match type:case 1:for i in args:js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.1)case 0:randomAll = numpy.random.choice([i for i in range(1, sum)],random.randint(int(sum / 2), sum + 1))  # 随机生成几个选项for i in randomAll:js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.1)time.sleep(0.2)  #
  1. 滑动函数
def slide(driver, distance):  # 用于屏幕滚动# 测算出最大的距离根据电脑屏幕分辨率而异,一般填写400到800,800是最大滑动距离js = "var q=document.documentElement.scrollTop=" + str(distance)driver.execute_script(js)time.sleep(0.2)
  1. 提交函数
def Submit(browser):# 点击提交submit = browser.find_element(By.XPATH, "//*[@id='ctlNext']")  # 网页源代码的xpathsubmit.click()  # 点击# 延时 太快会被检测是脚本time.sleep(0.1)
  1. 验证函数
def Verify():# 点击提交try:aasure = browser.find_element(By.XPATH, "//*[@id='layui-layer1']/div[3]/a")except:aasure = browser.find_element(By.XPATH, "//*[@class='layui-layer-btn0']")print("Error")time.sleep(600)asure = aasure  # 网页源代码的xpathasure.click()  # 点击time.sleep(1)verify = browser.find_element(By.XPATH, "//*[@id='SM_BTN_1']")  # 网页源代码的xpathverify.click()  # 点击# 延时 太快会被检测是脚本Stime.sleep(5)

(四)主程序(根据问卷客制)

if __name__ == '__main__':url = 'https://www.wjx.cn/vm/xxxxxxxx.aspx'# 你的问卷链接t1=time.time()for i in range(80):browser = Chrome(url)One_choice(1, 5)slide(browser, 630)One_choice(2, 2)One_choice(3, 4, 3)slide(browser, 1230)Multiple_choices(4, 6)slide(browser, 1830)Multiple_choices(5, 7)One_choice(6, 3)Multiple_choices(7, 5)slide(browser, 2230)One_choice(8, 2)Multiple_choices(9, 6)slide(browser, 2830)Multiple_choices(10, 5)slide(browser, 3230)Multiple_choices(11, 5)slide(browser, 3630)Submit(browser)Verify()browser.close()min=int((time.time()-t1)//60)sec = round((time.time() - t1) % 60, 2)print(i, f"已经完成!!!  耗时{min}min   {sec}sec")

切记切记 browser.quit()不能少 每一次运行结束,都要结束一次网页,否则不能连续填写

三、完整代码

如果效果不错的话,将来开发一个更加自动化的版本,实现题目自动识别。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :问卷星.py
# @Time      :2023/4/26 13:26
# @Author    :YKW
import numpy
import random
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Optionsdef Chrome(url):# 实例化一个启动参数对象chrome_options = Options()# 添加启动参数chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/79.0.3945.130 Safari/537.36"')  # 添加请求头chrome_options.add_argument('--disable-blink-features=AutomationControlled')# 防止被识别chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 设置开发者模式启动chrome_options.add_experimental_option('useAutomationExtension', False)  # 关闭selenium对chrome driver的自动控制# chrome_options.minimize_window()  # 网页最大化,已经无法使用# chrome_options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错chrome_options.add_argument('headless')  # 设置浏览器以无界面方式运行browser = webdriver.Chrome(options=chrome_options)  # 设置驱动程序,启动浏览器  (实现以特定参数启动)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})  # 用来执行Chrome开发这个工具命令browser.get(url)  # 获取问卷信息(此处填问卷链接)return browserdef One_choice(num, sum, *args):# sum是总共有多少选项 num是题号if len(args) != 0:js = "document.getElementById(\"q" + str(num) + "_" + str(args[0]) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(args[0]) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)else:randomId = random.randint(1, sum)  # 随机点击第一个选项或第二个选项# js实现方式js = "document.getElementById(\"q" + str(num) + "_" + str(randomId) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(randomId) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.2)  # 延时 太快会被检测是脚本def Multiple_choices(num, sum, *args):# num是总共有多少选项type = bool(len(args))match type:case 1:for i in args:js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.1)case 0:randomAll = numpy.random.choice([i for i in range(1, sum)],random.randint(int(sum / 2), sum + 1))  # 随机生成几个选项for i in randomAll:js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\" ).checked = true"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)js = "document.getElementById(\"q" + str(num) + "_" + str(i) + "\").click()"browser.execute_script(js)  # 使用js实现点击的效果(调用js方法,同时执行javascript脚本)time.sleep(0.1)time.sleep(0.2)  #def Blank():passdef slide(driver, distance):  # 用于屏幕滚动# 测算出最大的距离根据电脑屏幕分辨率而异,一般填写400到800,800是最大滑动距离js = "var q=document.documentElement.scrollTop=" + str(distance)driver.execute_script(js)time.sleep(0.2)def Submit(browser):# 点击提交submit = browser.find_element(By.XPATH, "//*[@id='ctlNext']")  # 网页源代码的xpathsubmit.click()  # 点击# 延时 太快会被检测是脚本time.sleep(0.1)def Verify():# 点击提交try:aasure = browser.find_element(By.XPATH, "//*[@id='layui-layer1']/div[3]/a")except:aasure = browser.find_element(By.XPATH, "//*[@class='layui-layer-btn0']")print("Error")time.sleep(600)asure = aasure  # 网页源代码的xpathasure.click()  # 点击time.sleep(1)verify = browser.find_element(By.XPATH, "//*[@id='SM_BTN_1']")  # 网页源代码的xpathverify.click()  # 点击# 延时 太快会被检测是脚本Stime.sleep(5)if __name__ == '__main__':url = 'https://www.wjx.cn/vm/OHoyYV3.aspx't1=time.time()for i in range(80):browser = Chrome(url)One_choice(1, 5)slide(browser, 630)One_choice(2, 2)One_choice(3, 4, 3)slide(browser, 1230)Multiple_choices(4, 6)slide(browser, 1830)Multiple_choices(5, 7)One_choice(6, 3)Multiple_choices(7, 5)slide(browser, 2230)One_choice(8, 2)Multiple_choices(9, 6)slide(browser, 2830)Multiple_choices(10, 5)slide(browser, 3230)Multiple_choices(11, 5)slide(browser, 3630)Submit(browser)Verify()browser.close()min=int((time.time()-t1)//60)sec = round((time.time() - t1) % 60, 2)print(i, f"已经完成!!!  耗时{min}min   {sec}sec")# browser.quit()

好用的话,别忘了点赞收藏呦!!!

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

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

相关文章

Python自动化填写问卷星问卷

本文使用pyhton实现常见的问卷星问卷自动化填写。如果出现智能验证,本文还不能有效绕过问卷星提交时出现的智能检测,还需要手动点击智能检测才能完成问卷的填写。 在网络问卷中,我们常见的问题有单选题、多选题和李克勤量表题,如下…

python自动填写问卷星

python自动填写问卷星 参考链接1 参考链接2 用python实现自动填问卷,通过智能验证以及滑动验证 1. 下载浏览器驱动 python自动化填写问卷需要依赖浏览器驱动,这里使用的是谷歌浏览器,所以需要下载chromedriver,且下载的版本要和浏览器版本…

问卷星问卷数据怎么快速导入SPSSAU?

最近收到小伙伴询问问卷星导入的问卷数据怎么编码? 现在的问卷调查,很多都是通过网络问卷的方式进行,问卷星是一个专业的在线问卷调查、测评投票平台,如果你的问卷正好是在问卷星网站发放,填答,回收数据&am…

python问卷星模拟提交

*一、前言 ** 笔者在家闲得无聊,突然想突破一下问卷星的反爬虫机制,顺便刷刷问卷,于是就开始分析了。 ** 二、分析过程 ** 1、fiddler抓包 模拟提交首先当然是打开fiddler看看提交了什么包啦。 2、分析不变参数 我们先来看不变的参数&…

使用python实现问卷星自动答题功能——基础篇

题主在学习的过程中,老是有人来让填问卷星,就觉得人填的很麻烦,于是就自己动手写了一个python脚本来实现自动填写问卷星 1.首先我们得学会使用python里面的一个库,selenium,这个库是用来专门面对浏览器的一个库&#…

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

用Python实现问卷星自动填写(超详细!!!) 前言一、配置环境1.1安装依赖1.2安装驱动 二、实战处理2.1、引入库函数2.2、程序所需函数详解(1)自定义单选函数(2)自定义多选函…

自动填写问卷星并提交

自动填写问卷星并提交 鉴于好多小伙伴要做数据分析的时候发放大量的问卷,但收回来的却寥寥无几,还受到其他小伙伴的冷眼,所以在下决定通过代码的方式,来实现问卷星的自动填写并提交。 以谷歌浏览器为例 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 的代码也没…