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

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

目录

1.下载浏览器驱动

2. selenium基本配置

导入相关的包

实例化一个启动参数对象

其他设置

设置驱动程序

3.答题代码

获取问卷内容

单选题

多选题

填空题

4.提交+智能验证

5.主函数

1.下载浏览器驱动

python自动化填写问卷需要依赖浏览器驱动,这里使用的是谷歌浏览器,所以需要下载chromedriver,且下载的版本要和浏览器版本一致。

首先打开谷歌浏览器,点击”帮助”——”关于Google Chrome”,查看浏览器版本。如图:

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

查看完版本后打开链接:CNPM Binaries Mirror下载对应系统对应版本的谷歌浏览器驱动。如图:

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

下载完成后会得到chromedriver.exe文件,此时将其复制到python工程目录文件夹中的venv文件夹中的Scripts文件夹下,如图:

【python】自动填写问卷星问卷及提交
  1. selenium基本配置

selenium本质是通过驱动浏览器,完全模拟浏览器的操作,就像真正的用户在操作一样。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。selenium库可以通过终端命令pip install selenium安装。

导入相关的包

import random          # 用于产生随机数
import time            # 用于延时
from selenium.webdriver.common.by import By      #导入By包进行元素定位
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

实例化一个启动参数对象

#实例化一个启动参数对象
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.maximize_window()      # 网页最大化

#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开发这个工具命令

3.答题代码

定义一个run方法,并往方法里面添加内容。

获取问卷内容

browser.get('https://www.***.**/**/*****.aspx')        # 获取问卷信息(此处填问卷链接)

单选题

    # 问题1的点击 (性别)
    randomId = random.randint(1, 2)       # 随机点击第一个选项或第二个选项

    #js实现方式
    js = "document.getElementById(\"q1_" + str(randomId) + "\").checked = true"
    browser.execute_script(js)         #使用js实现点击的效果(调用js方法,同时执行javascript脚本)
    js = "document.getElementById(\"q1_" + str(randomId) + "\").click()"
    browser.execute_script(js)         #使用js实现点击的效果(调用js方法,同时执行javascript脚本)

    # 延时 太快会被检测是脚本
    time.sleep(1)

    # 问题2    (年龄)
    randomId = random.randint(2, 4)   # 随机数,5个多选框 随机点击
    # js实现方式
    js = "document.getElementById(\"q2_" + str(randomId) + "\").checked = true"
    browser.execute_script(js)
    js = "document.getElementById(\"q2_" + str(randomId) + "\").click()"    # 拼接字符串的方式 js找到对应id 点击按钮
    browser.execute_script(js)
    # 延时
    time.sleep(0.1)

多选题

    # 问题5
    randomId = random.randint(1, 3)       # 随机数选择(选多少个)

    for i in range(1, randomId + 1):       # 循环 实现多选效果
        randomId1 = random.randint(1, 6)   #随机选择第1到第6个选项之一

        # 两种js实现方式
        js = "document.getElementById(\"q5_" + str(randomId1) + "\").checked = true"
        browser.execute_script(js)
        js = "document.getElementById(\"q5_" + str(randomId1) + "\").click()"
        browser.execute_script(js)

    # 延时
    time.sleep(1)

填空题


    # 问题25

    #自定义要填的内容
    block = ["定义第1个填空","定义第2个填空","定义第3个填空","定义第4个填空","定义第5个填空","定义第6个填空","无"]

    #在上述内容中随机选择一个填入
    randomId = random.randint(0, 5)          #(数值下标从0开始)

    #在题目中随机输入上述内容
    browser.find_element_by_id("q25").send_keys(block[randomId])

    # 延时
    time.sleep(0.1)

4.提交+智能验证

首先查看问卷源代码,并复制”提交”按钮的xpath,如图:

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

【python】自动填写问卷星问卷及提交
    #点击提交
    submit = browser.find_element_by_xpath("//*[@id='ctlNext']")    #网页源代码的xpath
    submit.click()      #点击

    #延时 太快会被检测是脚本
    time.sleep(0.5)
    # 模拟点击智能验证按钮
    # 先点确认
    browser.find_element(By.XPATH,"//button[text()='确认']").click()
    time.sleep(1)
    # 再点智能验证提示框,进行智能验证
    browser.find_element_by_xpath("//div[@id='captcha']").click()

5.主函数

if __name__ == "__main__":
    #批量提交问卷
    for i in range(10):          #运行一次提交10份问卷
         run()
         time.sleep(5)  # 避免提交过快 会出现验证

以上代码亲测有效, 当短时间内刷的问卷数过多时,可能会出现第二重智能验证,这就要手动验证了哦,所以为了防止出现二重智能验证,在每提交完一份问卷后,要用time.sleep函数用于延时 , 避免提交过快。

Original: https://blog.csdn.net/m0_59405106/article/details/124629714
Author: double@AI
Title: 【python】自动填写问卷星问卷及提交

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/729741/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ESP8266 系统环境搭建

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 入…

    Python 2023年8月9日
    071
  • python学习笔记——取矩阵的上三角或下三角元素

    取矩阵上三角 1、numpy.triu(x,k): x:输入数组 k:默认0,对角偏移项,用于指定置0值的位置;k=0表示主对角线的位置,此时保留主对角线上的值,下三角的元素全为0…

    Python 2023年8月23日
    0213
  • selenium+pytest——失败用例重试

    selenium+pytest——失败用例重试 一、目的 在我们使用selenium+pytest做UI自动化的时候偶尔会遇到因为特殊情况比如浏览器加载失败、网络波动等等导致用例运…

    Python 2023年9月9日
    044
  • F.interpolate——数组采样操作

    F.interpolate——数组采样操作 torch.nn.functional.interpolate(input, size=None, scale_factor=None,…

    Python 2023年8月2日
    043
  • Python数据分析—Pandas作业三

    Day3 练习1 练习2 导入需要的库 import numpy as np import pandas as pd 练习1 读取北向.csv 指定 trade_date 为 行索…

    Python 2023年8月22日
    047
  • 深度剖析Java的volatile实现原理,再也不怕面试官问了

    上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁。为什么volatile是轻量级锁,体现在哪些方面…

    Python 2023年10月16日
    045
  • Python Flask框架建立项目

    Flask项目建立 我使用的IDE是pycharm2020 专业版。 1、打开pycharm新建项目。点击”文件”->”新建项目&#822…

    Python 2023年8月11日
    067
  • Python之Pandas

    Python之pandas 文章目录 * – Python之pandas – + 环境:jupyter Notebook(Anaconda) + * 1.引…

    Python 2023年8月2日
    049
  • python编写小游戏

    这篇文章是关于python的如果没有没有安装python的童鞋请速速离开!!!python安装传送门传送门:😃😃😃😃😃😃😃😃😃😃声明一下,在我这下载的保证无毒,安装不了请把360、…

    Python 2023年9月24日
    035
  • 玩玩最近比较火的ChatGPT

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月3日
    032
  • 人工智能期末考试

    第一章-绪论 1.人工智能的定义 定义:使机器的软件或程序,通过某些算法进行数据学习,并使用所学进行仿人决策。 2. 人工智能的各种认知观 符号主义 ( symbolism ) 原…

    Python 2023年9月28日
    059
  • 炒股太累?来试试机器炒股吧,异常快乐

    软件架构 ; github仓库: https://gitee.com/linxinloningg/Stockquant https://github.com/linxinlonin…

    Python 2023年8月10日
    039
  • scrapy框架,腾讯新闻爬取

    Scrapy框架,腾讯新闻爬取 * – 创建工程命名newsqq – + 1.1使用命令创建 scrapy 工程 + 1.2新建爬虫主文件 + * 1.2….

    Python 2023年10月1日
    048
  • Pygame(十二)打砖块

    Pygame(十二)打砖块 目标 小球撞击响应 砖块撞击响应 挡板撞击响应 完整示例代码 ”’设计一个打砖块的游戏”’ import pygame import sys imp…

    Python 2023年9月21日
    040
  • C#/.NET/.NET Core优秀项目框架推荐

    前言: 为.NET开源者提供的一个推荐自己优秀框架的地址,大家可以把自己的一些优秀的框架,或者项目链接地址存到在这里,提供给广大.NET开发者们学习( 注意:排名不分先后,都是十分…

    Python 2023年10月23日
    035
  • 树莓派+Flask实现远程拍照WEB服务器

    组件: Raspberry Pi 3B 1G RMONCAM G180摄像头 环境: Python:3.7.3 Flask:1.0.2 opencv-python:4.5.3.56…

    Python 2023年8月9日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球