学习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:解决连接未关闭

webdriver.chrome的get函数设置不了参数

selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)

这两种方法尝试解决失败:get方法不可以带参数

解决:

把打开浏览器并关闭改为关闭标签页

注:其中涉及了几个之前不了解的函数

# -*- 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:

2018年4.28;可能已经失效,包加密了

创建测试问卷,提交,查看向服务器发送的包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nzP9oyOv-1595145819599)(F:\笔记\笔记图\爬虫思路2_01.jpg)]

向一个地址发送了:

  • 问卷id curlD
  • 发送时间 t
  • 开始答题时间 starttime
  • 未知参数: rn
  • 题目答案 submitdata

那模拟提交问卷的思路也就很清晰了

  1. 请求页面 就解析出(rn)
  2. 计算其他参数,如t、starttime
  3. 找到所有的问题,并随机做答,构造submitdata
  4. 发送请求

具体代码

最主要的就两个部分

找到 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实现问卷星自动填写问卷相关推荐

  1. 【JavaScript】【ChormeDav】问卷星自动填写问卷

    problem 如题:钉钉在家考试,用的问卷星,只需要先提交一遍就可以获得答案,然后再填写自己的问卷. solution 单选题用XPath查找填写,random生成随机数选择选项 多选题,取出页面中 ...

  2. 用Python实现问卷星自动填写(超详细!!!)

    用Python实现问卷星自动填写(超详细!!!) 前言 一.配置环境 1.1安装依赖 1.2安装驱动 二.实战处理 2.1.引入库函数 2.2.程序所需函数详解 (1)自定义单选函数 (2)自定义多选 ...

  3. python问卷星自动填写

    疫情期间闲着无聊,每天都要填写问卷星来报告健康情况,于是就拿python爬虫写了一个问卷星自动填写系统,一起来看看吧_ import requests import re import time im ...

  4. Python实现问卷星自动填写和选择

    Python实现问卷星自动填写和选择 啊哈哈哈,我朋友叫我帮他填写问卷星,,我就直接写了个python脚本帮他一次性解决 全随机,全自动,一开始我用的是BP直接抓包发送,不过发送频率过快会让你验证,, ...

  5. JavaScript——问卷星自动填写

    一.前言: 我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的.但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表.一顿操作后,在github ...

  6. python爬取问卷星内容,Python 问卷星自动填写 爬虫

    Python帮你填问卷星 ps:网上看到的代码,虽然技术不深,但我觉得挺有用的,所以在此分享给大家 在某段时间朋友圈是否一直充斥着各种问卷调查,为了达成某种要求我们不断向好友求助填写问卷,今天,我就把 ...

  7. 问卷星自动填写python selenium脚本(2021vim版,亲测有效,看这一篇就够了)

    目录 前言 一.前期准备 二.具体步骤 1.导入库与预定义变量 2.打开浏览器,防止识别为脚本 3浏览问题,选择问题 4提交按钮,验证 全部代码 前言 问卷星已经成为收集问卷的一个很重要的工具,有时可 ...

  8. 问卷星自动填写JavaScrip脚本使用教程

    本文所用到的案例: https://blog.csdn.net/weixin_44343074/article/details/106133929?ops_request_misc=%257B%252 ...

  9. python爬取问卷星内容_Python Selenium 问卷星自动填写

    从问卷星网站找的一个模板 编写思路大致是这样xpath定位网页元素 driver.find_element_by_xpath 对元素进行操作,有点击click和填入send_keys 最后点击提交问卷 ...

最新文章

  1. webform里的验证控件
  2. 总算会用sphinx生成文档了
  3. 不走寻常路 IBM云计算解决方案解读
  4. FPGA作为从机与STM32进行SPI协议通信---Verilog实现
  5. Spring Boot 配置元数据指南
  6. vector中find 的用法
  7. 【论文精读】Temporally Refined Graph U-Nets for Human Shape and Pose Estimation From Monocular Videos
  8. 使用ESP定律_手工脱壳
  9. jQuery常用的全局方法源码
  10. hadoop详细笔记(十一) mapreduce数据分析案例之线段重叠案例
  11. SAP GUI 770 百度网盘下载
  12. 寒假学习计划统筹以及考研展望
  13. Disney Springs - 迪士尼之泉
  14. 什么是mes?它的功能有哪些?
  15. 风雨砥砺,岁月如歌——Ts之箭头函数
  16. 晶体三极管及其基本放大电路
  17. 付出与回报——伍迷“我的2007”随想 (转载 注 这个文章再次告诉我,做人要厚道,只要付出了,总有...
  18. 详解 图像旋转变换 原理
  19. bpm js 计算 音乐_Studio One如何测试和调整歌曲的BPM
  20. Python 资源大全中文版【2018-11-21】

热门文章

  1. 江苏机器人竞赛南航_第十八届江苏省青少年机器人竞赛(江苏赛区)开幕
  2. FindBugs规则整理
  3. javascript中indexOf与search的区别(详解)
  4. java中ioc作用_java中的ioc是什么
  5. 欧氏空间距离和内积_高等代数欧几里得空间讲解.ppt
  6. linux自动探测mtu,Arch Linux 启用 MTU 探测
  7. 进度条怎么切点9_夏天的豌豆凉粉,怎么调味是关键,调对了减肥,调错了增肥...
  8. 树莓派重温红白机游戏
  9. 用python画关系网络图-使用Python的networkx绘制精美网络图教程
  10. 软件开发中的一些名言