- 🚀 批量自动填写 - 支持一键批量完成多份问卷填写
- 🖥️ 可视化界面 - 基于 FastAPI 的 Web 界面,支持远程访问
- 🔄 实时进度追踪 - 实时显示任务状态和完成进度
- 🐛 调试模式 - 可选显示浏览器界面,便于调试和查看填写过程
- 🎯 智能填写策略 - 单选题、多选题、矩阵题自动随机填写
- 📊 任务管理 - 支持多任务并发,状态独立管理
- 后端框架: FastAPI 0.115
- 自动化引擎: Playwright (Chromium)
- 包管理器: uv
- Python 版本: 3.12
- Python 3.12
- uv (推荐) 或 pip
- 克隆仓库
git clone https://github.com/koen666/wenjx.git
cd wenjx- 安装依赖
使用 uv(推荐):
uv sync或使用 pip:
pip install -e .- 安装 Playwright 浏览器
python -m playwright install chromiumuv run app服务将在 http://127.0.0.1:8000 启动,浏览器访问即可使用。
- 访问
http://127.0.0.1:8000 - 输入问卷星问卷链接(如
https://www.wjx.cn/vm/XXX.aspx) - 设置填写份数(1-50)
- 可选:勾选"显示浏览器界面"以查看填写过程
- 点击"开始填写"按钮
- 实时查看任务状态和日志
POST /run
Content-Type: application/json
{
"url": "https://www.wjx.cn/vm/QHzdwQy.aspx",
"times": 5,
"show_browser": false
}响应:
{
"job_id": "9f82abed319741f18915320e606d5d6c"
}GET /status/{job_id}响应:
{
"status": "running",
"logs": ["第 1 份完成", "第 2 份完成"],
"error": null
}wenjx-auto/
├── api/ # API 路由模块
│ ├── __init__.py
│ └── routes.py # FastAPI 路由定义
├── models/ # 数据模型
│ ├── __init__.py
│ └── schemas.py # Pydantic 数据模型
├── services/ # 业务逻辑
│ ├── __init__.py
│ └── wenjx_service.py # 问卷填写核心逻辑
├── templates/ # 前端模板
│ └── index.py # HTML 模板(Apple 风格)
├── app.py # FastAPI 应用入口
├── pyproject.toml # 项目配置和依赖
├── .gitignore
└── README.md
当前版本针对特定问卷结构进行了配置,支持:
- 单选题 (Question 1, 4): 从 5 个选项中随机选择
- 单选题 (Question 2, 3): 从 2 个选项中随机选择
- 多选题 (Question 5-9): 根据权重分布随机选择 1-5 个选项
- 矩阵评分题 (Question 10): 每行随机选择评分
如需适配其他问卷,请修改 services/wenjx_service.py 中的 _fill_form 函数。
编辑 app.py 文件:
def main():
import uvicorn
uvicorn.run(
"app:app",
host="0.0.0.0", # 改为 0.0.0.0 允许外部访问
port=8000, # 修改端口
reload=False,
log_level="info",
)编辑 services/wenjx_service.py,修改 _fill_form 函数中的题目配置:
async def _fill_form(page):
# 根据实际问卷结构修改
single_5 = [1, 4] # 5 选 1 的题目编号
single_2 = [2, 3] # 2 选 1 的题目编号
multi_5 = [5, 6, 7, 8, 9] # 多选题编号
# ...错误信息:Executable doesn't exist at ...
解决方法:
python -m playwright install chromium错误信息:[Errno 10048] error while attempting to bind
解决方法:修改 app.py 中的 port 参数为其他端口。
重启服务后任务状态会丢失(存储在内存中)。如需持久化,可改用 Redis 或数据库存储。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本工具仅供学习交流使用,请勿用于任何违反问卷星服务条款或法律法规的行为。使用本工具产生的任何后果由使用者自行承担。
如有问题或建议,欢迎通过 Issues 反馈。
Made with ❤️ by KeHe