基于spring boot的问卷星自动填写脚本

项目介绍

本项目是一个基于 Spring Boot 开发的 Web 自动化工具,帮助快速填写问卷以及学习使用

项目框架

在这里插入图片描述

环境要求

使用本项目前,请确保您的环境满足以下条件:

  1. 基础环境:
    • Java 17 或更高版本
    • Maven 3.6 或更高版本
    • Chrome 浏览器(用于 Selenium)

Chrome官网地址:https://googlechromelabs.github.io/chrome-for-testing/(这里可以自己选择版本)
Chrome(134.0.6998.88版本): https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.88/win64/chrome-win64.zip (打开链接自动下载对应版本)
chromedrive(134.0.6998.88版本): https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.88/win64/chromedriver-win64.zip (打开链接自动下载对应版本)
下载后解压,注意路径不能有中文

  1. 推荐开发工具:
    • IntelliJ IDEA(推荐)
    • VS Code + Java 插件

快速开始

  1. 获取项目(Gitee):

Gitee项目地址: https://gitee.com/tkf111/auto-survey-filler
演示网站地址: http://autoq13.top

  1. 修改配置:

目标文件:application.yml, 把这里的binary和driver修改为你自己的路径,注意不要有中文,端口号随意(必须配置)

webdriver:
  cache:
    path: ./drivers
  chrome:
    binary: ${WEBDRIVER_CHROME_BINARY:D:\\plug\\chrome\\chrome-win64 (1)\\chrome-win64\\chrome.exe}
    driver: ${WEBDRIVER_CHROME_DRIVER:D:\\plug\\chrome\\chromedriver-win64 (1)\\chromedriver-win64\\chromedriver.exe}

server:
  port: 8080

目标文件:ProxyService,如果需要使用代理,修改String apiUrl = “”; // 这里填写API地址(不是必须,不使用代理不用管)

 /**
     * 从API获取代理
     */
    private String fetchProxyFromApi() {
        try {
            String apiUrl = "";    // 这里填写API地址
            if (apiUrl == null) {
                log.error("代理API URL未配置");
                return null;
            }

            log.info("开始请求代理API,URL: {}", apiUrl);
            
            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            
            int responseCode = conn.getResponseCode();
            log.info("代理API响应码: {}", responseCode);
            
            if (responseCode != HttpURLConnection.HTTP_OK) {
                log.error("代理API请求失败,响应码: {}", responseCode);
                return null;
            }
            
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
                String response = reader.readLine();
                log.info("成功获取代理响应: {}", response);
                return response;
            }
        } catch (Exception e) {
            log.error("请求代理API失败:{}", e.getMessage());
            return null;
        }
    }

目标文件:ProxyConfig, 使用代理时候有一个测试IP是否可用,修改@Value(“${proxy.warmup.test-urls:https://www.wjx.cn/vm/examle.aspx}”) // 默认问卷星URL,使用ip代理时候换成你的(不是必须,不使用代理不用管)

package com.example.wenmini.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
public class ProxyConfig {
    // 代理服务器配置
    private String proxyHost;
    private int proxyPort;
    private long lastUpdateTime; // 记录代理更新时间
    
    // 预热配置
    @Value("${proxy.warmup.timeout:30000}")
    private int warmupTimeout; // 预热超时时间,默认30秒
    
    @Value("${proxy.warmup.test-urls:https://www.wjx.cn/vm/examle.aspx}") // 默认问卷星URL,使用ip代理时候换成你的
    private String[] warmupTestUrls; // 预热测试URL列表,默认为问卷星URL
    
    @Value("${proxy.max-use-time:1800000}")
    private long maxUseTime; // 代理最大使用时间,默认30分钟
    
    @Value("${proxy.retry-count:3}")
    private int maxRetryCount; // 最大重试次数
    
    @Value("${proxy.retry-interval:2000}")
    private long retryInterval; // 重试间隔时间(ms)


}
  1. 访问服务:
    • 启动成功后,访问 http://localhost:8080

功能特性

  1. 可视化配置

    • 配置了简单的前端交互,方便配置问卷
      在这里插入图片描述
  2. 快捷任务配置

    • 支持设置填写次数,间隔时间(间隔时间好像有点问题,需要修改的化建议改动后端的随机思考时间函数)
    • 支持选择代理
    • 支持信度检验
      在这里插入图片描述
  3. 数据缓存

    • 本地缓存历史记录链接,方便使用
      在这里插入图片描述
  4. 支持题型

    • 单选题
    • 多选题
    • 文本题

如果有更多需要,可在QuestionChoice.java文件中继续添加题型配置,前端也需要同步配置

常见问题

  1. 浏览器启动失败?

    • 确保已安装 Chrome 浏览器
    • 检查路径是否正确,是否包含中文
    • 检查 WebDriver 版本是否与浏览器版本匹配
    • 查看日志中的详细错误信息
  2. 问卷填写失败?

    • 网络原因,有时候有些网络或者vpn会导致访问问卷失败
    • 题型不支持,有不支持题型时候也会中断报错
    • 出现智能验证
  3. 如何解决?

    • 在DriverService中,把设置无头模式的代码暂时注释掉,可以看到填写细节,问卷在哪里停止了,然后锁定问题
    • 留言或者私信,遇到的具体问题和报错
 /**
     * 创建新的WebDriver实例
     */
    public WebDriver createWebDriver(boolean useProxy) {
        try {
            log.info("开始创建WebDriver实例...");
            System.setProperty("webdriver.chrome.driver", chromeDriverPath);

            ChromeOptions options = new ChromeOptions();
            
            // 设置Chrome二进制文件路径
            if (chromeBinaryPath != null && !chromeBinaryPath.isEmpty()) {
                options.setBinary(chromeBinaryPath);
            }

            // 配置代理
            if (useProxy) {
                configureProxy(options);
            }

            // 设置无头模式
            options.addArguments("--headless=new");

            // 配置浏览器首选项
            configureBrowserPreferences(options);

            // 添加Chrome启动参数
            addChromeArguments(options);

            // 设置随机User-Agent
            options.addArguments("--user-agent=" + fingerprintGenerator.generateUserAgent());

            // 创建WebDriver实例
            WebDriver driver = new ChromeDriver(options);

            // 配置超时设置
            configureTimeouts(driver);

            // 注入动态指纹
            injectFingerprint(driver);

            log.info("WebDriver实例创建成功");
            return driver;

        } catch (Exception e) {
            log.error("创建WebDriver实例失败:{}", e.getMessage());
            throw new RuntimeException("创建WebDriver实例失败", e);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值