Python+Selenium刷问卷星问卷

本文介绍了一个使用Python和Selenium库自动填写问卷的脚本,该脚本能够处理包括单选题、排序题和矩阵量表在内的多种题型。通过随机选择答案,脚本可以自动完成问卷填写并提交,但需注意速度过快可能触发验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正巧最近在做一份问卷,心血来潮就码了这么一个东西,仅供玩乐,切勿滥用.

目前只是一个简单的模型,具体的题型设置还需要自己去修改一下代码.

安装好需要的Python的各个模块以及Chromedriver就OK了

下面代码的题型对应的是我自己问卷的题目设置,所以,如果要使用,还要根据具体情况修改

注:每填写完一份问卷最后把延时放久一些,太快问卷星会刷出验证码.验证码的识别以后还记得就来加上.

#coding=utf-8
import time
import json
import random
import base64
import requests
import urllib
from PIL import Image
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def autoSelect():
    #将问卷星网站放在下面
    driver.get('https://www.wjx.cn/m/-------.aspx')

    key_1=str(random.randint(1,4))
    key_4='0'

    #单选题,因为和后面的题有逻辑关系,记下随机值key_1
    xpath1 = '//*[@id="div1"]/div[2]/div[%s]'%key_1
    answer_1 = driver.find_elements_by_xpath(xpath1)[0]
    answer_1.click()

    xpath2 = '//*[@id="div2"]/div[2]/div[%s]' % str(random.randint(1,2))
    answer_2 = driver.find_elements_by_xpath(xpath2)[0]
    answer_2.click()

    if key_1=='1' :
        xpath3 = '//*[@id="div4"]/div[2]/div[%s]' % str(random.randint(1,3))
        answer_3 = driver.find_elements_by_xpath(xpath3)[0]
        answer_3.click()
    else:
        key_4=str(random.randint(1,3))
        xpath4 = '//*[@id="div4"]/div[2]/div[%s]' % key_4
        answer_4 = driver.find_elements_by_xpath(xpath4)[0]
        answer_4.click()
        
    if key_4=='1':
        xpath6 = '//*[@id="div6"]/div[2]/div[%s]' % str(random.randint(1,4))
        answer_6 = driver.find_elements_by_xpath(xpath6)[0]
        answer_6.click()
    if key_4=='2' :
		xpath5 = '//*[@id="div5"]/div[2]/div[%s]' % str(random.randint(1,4))
		answer_5 = driver.find_elements_by_xpath(xpath5)[0]
		answer_5.click()
    if key_4=='3' :
		xpath7 = '//*[@id="div7"]/div[2]/div[%s]' % str(random.randint(1,4))
		answer_7 = driver.find_elements_by_xpath(xpath7)[0]
		answer_7.click()
    

    xpath8 = '//*[@id="div8"]/div[2]/div[%s]' % str(random.randint(1,3))
    answer_8 = driver.find_elements_by_xpath(xpath8)[0]
    answer_8.click()
    #排序题
    qList_9 = [str(x) for x in range(1,9)]
    print qList_9
    random.shuffle(qList_9)
    print qList_9
    for i in qList_9:
        xpath9 = '//*[@id="div9"]/ul/li[%s]/div[1]' % i
        answer_9 = driver.find_elements_by_xpath(xpath9)[0]
        answer_9.click()
    #矩阵量表
    for i in range(1,9):
	    xpath11 = '//*[@id="drv11_%s"]/td[%s]/a'%(str(i),str(random.randint(1,6)))
	    answer_11 = driver.find_elements_by_xpath(xpath11)[0]
	    answer_11.click()

    xpath12 = '//*[@id="div12"]/div[2]/div[%s]' % str(random.randint(1,3))
    answer_12 = driver.find_elements_by_xpath(xpath12)[0]
    answer_12.click()

    #矩阵量表    
    for i in range(1,16):
	    xpath13 = '//*[@id="drv13_%s"]/td[%s]'%(str(i),str(random.randint(1,4)))
	    answer_13 = driver.find_elements_by_xpath(xpath13)[0]
	    answer_13.click()



    xpath14 = '//*[@id="div14"]/div[2]/div[%s]' % str(random.randint(1,3))
    answer_14 = driver.find_elements_by_xpath(xpath14)[0]
    answer_14.click()

    
    #提交
    submit = driver.find_elements_by_css_selector('#ctlNext')[0]
    submit.click()

    time.sleep(0.5)


if __name__ == '__main__':
    driver = webdriver.Chrome()
    #循环4次
    for index in range(1,5):
        autoSelect()

 

### 使用Python Selenium自动化填写问卷问卷 为了实现这一目标,通常会采用Selenium WebDriver来控制浏览器完成一系列交互动作。下面是一个简化版的例子,展示了如何设置环境并编写脚本来自动填充问卷。 #### 安装依赖包 首先需要安装`selenium`以及对应的WebDriver驱动程序。对于Chrome浏览器来说,可以使用如下命令通过pip工具安装必要的软件包: ```bash pip install selenium webdriver_manager ``` 接着下载对应版本的chromedriver,并将其路径配置到系统的PATH环境中或者直接指定给webdriver.Chrome()方法[^1]。 #### 初始化浏览器实例 创建一个新的Chrome浏览器对象用于后续的操作,在此之前可以通过选项类来自定义启动参数比如无头模式(headless),禁用GPU加速等特性以提高效率减少资源占用: ```python from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC service = ChromeService(executable_path=ChromeDriverManager().install()) options = webdriver.ChromeOptions() # options.add_argument('--headless') # Uncomment this line to run in headless mode. driver = webdriver.Chrome(service=service, options=options) ``` #### 访问网站并定位元素 打开目标网页链接之后,可以根据页面结构分析HTML源码找到各个表单项所关联的选择器(selector),进而调用find_element系列接口获取DOM节点引用以便进一步处理: ```python url = 'https://www.wjx.cn/questionnaire/...' # Replace with actual URL of the form you want to fill out. try: driver.get(url) wait = WebDriverWait(driver, timeout=10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".field-item")) ) elements = driver.find_elements(By.CLASS_NAME, "field-item") except Exception as e: print(f"An error occurred while loading page or finding elements: {e}") finally: pass ``` #### 自动化输入数据 遍历所有可编辑区域逐个填入预设好的答案字符串;针对单选框、多选框则需额外判断其状态再决定是否点击勾选; 对于下拉列表类型的控件可能还需要模拟展开菜单后再选取特定项: ```python answers = ["answer_1", "answer_2"] # List containing your predefined answers here. for index, element in enumerate(elements[:len(answers)]): # Limit loop count by length of provided answers list. try: input_field_type = element.tag_name.lower() if input_field_type == "input": element.clear() element.send_keys(answers[index]) elif input_field_type == "select": # Handle dropdown lists separately. select_box = Select(element) option_value_to_choose = f"value_{index}" # Define logic for selecting specific value from drop-down menu. select_box.select_by_visible_text(option_value_to_choose) else: continue except StaleElementReferenceException: break except NoSuchElementException: continue ``` #### 提交表单 当所有的必答题都已经被正确作答完毕后就可以寻找提交按钮执行最终的动作了。需要注意的是某些情况下可能会存在验证码机制阻止机器人行为的发生,此时就需要引入图像识别技术或者其他手段绕过验证环节[^2]: ```python submit_button_locator = (By.XPATH, "//button[@type='submit']") wait.until(EC.element_to_be_clickable(submit_button_locator)) submit_btn = driver.find_element(*submit_button_locator) if submit_btn.is_enabled(): submit_btn.click() else: raise ValueError("Submit button is not enabled.") ``` 以上就是关于怎样运用Python配合Selenium框架来进行在线问卷自动化填写的大致流程介绍。实际项目开发过程中还需考虑更多细节问题如异常捕获重试逻辑设计、日志记录功能集成等方面的工作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值