学习python实现问卷星自动填写问卷
学习python实现问卷星自动填写问卷
文章目录
- 学习python实现问卷星自动填写问卷
- 任务一:找帖子
- 思路一:
- 配置环境:
- 利用CSS选择器对页面进行解析
- 我们发现,我们所有的题目的回答的选项的标签都在li标签里面,所以我们找到li标签。ans=answer.find_elements_by_css_selector(‘li’)
- 但是我们要想实现快速的填写,我们还得进行浏览器的关闭(因为浏览器开一次只能填一次,所以可以让它自动关闭),然后我们在使用一个循环,进行不断的开关浏览器,即可实现不停的填写问卷
- 进一步:利用try catch跳过无法作答的题避免死循环
- 进一步:模拟滑动浏览器
- 思路一完整代码
- 运行结果报错
- 疑似解决办法1:解决连接未关闭
- selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
- 解决:
- 思路2:
- 创建测试问卷,提交,查看向服务器发送的包
- 具体代码
- 反馈:
任务一:找帖子
思路一:
配置环境:
slenium库,调用的对应浏览器驱动,此处为Chrome
解压后放在python目录下
使用python实现问卷星自动答题功能——基础篇
(对标签解析)
random库实现随机选择
定位题目对应标签
from selenium import webdriver import random 打开问卷星 driver = webdriver.Chrome() driver.get('https://www.wjx.cn/jq/22452252.aspx')
利用CSS选择器对页面进行解析
我们发现,我们所有的题目的回答的选项的标签都在li标签里面,所以我们找到li标签。ans=answer.find_elements_by_css_selector(‘li’)
####先滑到标签再去点击 driver.execute_script("arguments[0].scrollIntoView();",answer) ### 找到标签 ans=answer.find_elements_by_css_selector('li') lsans=random.choice(ans)lsans.click()
填空题:标签为textarea
`if not ans:text=answer.find_element_by_css_selector('textarea')text.send_keys('没有')continue`
提交问卷选项
am=driver.find_element_by_css_selector('#submit_button') am.click()
但是我们要想实现快速的填写,我们还得进行浏览器的关闭(因为浏览器开一次只能填一次,所以可以让它自动关闭),然后我们在使用一个循环,进行不断的开关浏览器,即可实现不停的填写问卷
driver.quit()
进一步:利用try catch跳过无法作答的题避免死循环
首先我们获得了answer之后,我们得避免一些问题导致我们的代码出现红字,于是我们使用try来避免报错(这个原因是,有些题目我们不能作答,但是使用死的代码会发生卡死的现象。)举个简单的例子,当我们遇到一个分叉的时候,比如有的题目,你选了否就会答第五题,选了是就会答第六题,这样子虽然我们会获取到五和六的题目的div,但是却不能两者都答,如果不使用try的话,会导致代码报错不能运行,我们使用try这样子就可以保持即使这题答不了,也只会把异常抛出,然后我们依然会往后做(这样子就从另一个角度来解决了分叉的问题)。
进一步:模拟滑动浏览器
因为问卷星肯定不是只有几题的,肯定是有很多道题的,所以我们要滑动浏览器(因为我们使用的点击只是模仿人的操作,人肯定是不能到自己看不到的地方答题的)使用driver.execute_script(“arguments[0].scrollIntoView();”,answer)来进行浏览器的滑动
思路一完整代码
from selenium import webdriver
import random
driver = webdriver.Chrome()
driver.get('https://www.wjx.cn/jq/22452252.aspx')
answers = driver.find_elements_by_css_selector('.div_question')
for i in range(5):for answer in answers:try:####先滑到标签再去点击driver.execute_script("arguments[0].scrollIntoView();",answer)### 找到标签ans=answer.find_elements_by_css_selector('li')if not ans:text=answer.find_element_by_css_selector('textarea')text.send_keys('没有')continuelsans=random.choice(ans)lsans.click()except Exception as e:print(e)am=driver.find_element_by_css_selector('#submit_button')am.click() driver.quit()
运行结果报错
第一次成功打开Chrome浏览器填写并退出,后台有提交记录
填写了单选和,后四次未执行成功
报错
MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=9659): Max retries exceeded with url: /session/14150baedf86c6930897efe3675806f3/element (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000204D3E95B70>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))
疑似解决办法1:解决连接未关闭
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
解决:
把打开浏览器并关闭改为关闭标签页
注:其中涉及了几个之前不了解的函数
# -*- coding: utf-8 -*-from selenium import webdriverimport randomdriver = webdriver.Chrome()# driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
#安装目录不在python目录下解决办法driver.get('https://www.baidu.com')
#打开一个主标签页for i in range(5):js = "window.open('https://www.wjx.cn/jq/85695920.aspx')"#定义一个js语句传给driver.execute_scrip执行:打开新标签页driver.execute_script(js)# driver.get('https://www.wjx.cn/jq/22452252.aspx') handlers =driver.window_handlesdriver.switch_to_window(handlers[1])answers = driver.find_elements_by_css_selector('.div_question')for answer in answers:try:####先滑到标签再去点击driver.execute_script("arguments[0].scrollIntoView();",answer)### 找到标签ans=answer.find_elements_by_css_selector('li')if not ans:text=answer.find_element_by_css_selector('textarea')text.send_keys('没有')continuelsans=random.choice(ans)lsans.click()except Exception as e:print(e)# am=driver.find_element_by_css_selector('#submit_button')# am.click() driver.close()driver.switch_to_window(handlers[0])driver.quit()
思路2:
创建测试问卷,提交,查看向服务器发送的包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nzP9oyOv-1595145819599)(F:\笔记\笔记图\爬虫思路2_01.jpg)]
向一个地址发送了:
- 问卷id curlD
- 发送时间 t
- 开始答题时间 starttime
- 未知参数: rn
- 题目答案 submitdata
那模拟提交问卷的思路也就很清晰了
- 请求页面 就解析出(rn)
- 计算其他参数,如t、starttime
- 找到所有的问题,并随机做答,构造submitdata
- 发送请求
具体代码
最主要的就两个部分
找到 rn
def parse_post_url(resp):'''解析出提交问卷的url'''# 找到rnrn = int(resp.html.search('rndnum="{}"')[0].split('.')[0])# 提交问卷的时间raw_t = round(time.time(), 3)t = int(str(raw_t).replace('.', ''))# 模拟开始答题时间starttime = datetime.fromtimestamp(int(raw_t) - randint(1, 60 * 3)).strftime("%Y/%m/%d %H:%M:%S")url = POST_URL_MAP.format(QUESTION_ID, t, starttime, rn)return url
找到所有题目
def parse_post_data(resp):'''解析出问题和选项返回post_data'''post_data = {'submitdata': ""}questions = resp.html.find('fieldset', first=True).find('.div_question')for i, q in enumerate(questions):title = q.find('.div_title_question_all', first=True).textchoices = [t.text for t in q.find('label')]random_index = randint(0, len(choices) - 1)choice = choices[random_index]post_data['submitdata'] += '{}${}}}'.format(i+1, random_index+1)print(QUESTION_INFO.format(title, choices, choice))time.sleep(0.5)# 去除最后一个不合法的`}`post_data['submitdata'] = post_data['submitdata'][:-1]return post_data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BwDXBydc-1595145819602)(F:\笔记\笔记图\爬虫思路2_02.jpg)]
反馈:
- 代码现在不能用了啊,post返回的也是200,但是问卷星后台不统计啊,
- 同一个ip多次填写不会触发验证码麽?
- 使用代理ip呀
学习python实现问卷星自动填写问卷相关推荐
- 【JavaScript】【ChormeDav】问卷星自动填写问卷
problem 如题:钉钉在家考试,用的问卷星,只需要先提交一遍就可以获得答案,然后再填写自己的问卷. solution 单选题用XPath查找填写,random生成随机数选择选项 多选题,取出页面中 ...
- 用Python实现问卷星自动填写(超详细!!!)
用Python实现问卷星自动填写(超详细!!!) 前言 一.配置环境 1.1安装依赖 1.2安装驱动 二.实战处理 2.1.引入库函数 2.2.程序所需函数详解 (1)自定义单选函数 (2)自定义多选 ...
- python问卷星自动填写
疫情期间闲着无聊,每天都要填写问卷星来报告健康情况,于是就拿python爬虫写了一个问卷星自动填写系统,一起来看看吧_ import requests import re import time im ...
- Python实现问卷星自动填写和选择
Python实现问卷星自动填写和选择 啊哈哈哈,我朋友叫我帮他填写问卷星,,我就直接写了个python脚本帮他一次性解决 全随机,全自动,一开始我用的是BP直接抓包发送,不过发送频率过快会让你验证,, ...
- JavaScript——问卷星自动填写
一.前言: 我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的.但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表.一顿操作后,在github ...
- python爬取问卷星内容,Python 问卷星自动填写 爬虫
Python帮你填问卷星 ps:网上看到的代码,虽然技术不深,但我觉得挺有用的,所以在此分享给大家 在某段时间朋友圈是否一直充斥着各种问卷调查,为了达成某种要求我们不断向好友求助填写问卷,今天,我就把 ...
- 问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)
目录 前言 一.前期准备 二.具体步骤 1.导入库与预定义变量 2.打开浏览器,防止识别为脚本 3浏览问题,选择问题 4提交按钮,验证 全部代码 前言 问卷星已经成为收集问卷的一个很重要的工具,有时可 ...
- 问卷星自动填写JavaScrip脚本使用教程
本文所用到的案例: https://blog.csdn.net/weixin_44343074/article/details/106133929?ops_request_misc=%257B%252 ...
- python爬取问卷星内容_Python Selenium 问卷星自动填写
从问卷星网站找的一个模板 编写思路大致是这样xpath定位网页元素 driver.find_element_by_xpath 对元素进行操作,有点击click和填入send_keys 最后点击提交问卷 ...
最新文章
- webform里的验证控件
- 总算会用sphinx生成文档了
- 不走寻常路 IBM云计算解决方案解读
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现
- Spring Boot 配置元数据指南
- vector中find 的用法
- 【论文精读】Temporally Refined Graph U-Nets for Human Shape and Pose Estimation From Monocular Videos
- 使用ESP定律_手工脱壳
- jQuery常用的全局方法源码
- hadoop详细笔记(十一) mapreduce数据分析案例之线段重叠案例
- SAP GUI 770 百度网盘下载
- 寒假学习计划统筹以及考研展望
- Disney Springs - 迪士尼之泉
- 什么是mes?它的功能有哪些?
- 风雨砥砺,岁月如歌——Ts之箭头函数
- 晶体三极管及其基本放大电路
- 付出与回报——伍迷“我的2007”随想 (转载 注 这个文章再次告诉我,做人要厚道,只要付出了,总有...
- 详解 图像旋转变换 原理
- bpm js 计算 音乐_Studio One如何测试和调整歌曲的BPM
- Python 资源大全中文版【2018-11-21】
热门文章
- 江苏机器人竞赛南航_第十八届江苏省青少年机器人竞赛(江苏赛区)开幕
- FindBugs规则整理
- javascript中indexOf与search的区别(详解)
- java中ioc作用_java中的ioc是什么
- 欧氏空间距离和内积_高等代数欧几里得空间讲解.ppt
- linux自动探测mtu,Arch Linux 启用 MTU 探测
- 进度条怎么切点9_夏天的豌豆凉粉,怎么调味是关键,调对了减肥,调错了增肥...
- 树莓派重温红白机游戏
- 用python画关系网络图-使用Python的networkx绘制精美网络图教程
- 软件开发中的一些名言