使用Python自动填写问卷星(pyppeteer反爬虫版)
写此文的目的是为了方便寒假自己忘记填问卷星
一开始的想法和去年一样,去年就写过一版,想着今年不过就是改改数据,换换id而已,另外没想到的事情发生了。。。
满怀信心的写完代码
from selenium import webdriver
import time
import random def run():
browser = webdriver.Chrome()
browser.get("网址") # 1
js = "document.getElementById(\"q1\").click()"
browser.execute_script(js)
browser.switch_to.frame("__calendarIframe")
js2 = "document.getElementById(\"selectTodayButton\").click()"
browser.execute_script(js2)
browser.switch_to.parent_frame() # 2
js = "document.getElementById(\"q2\").click()"
browser.execute_script(js)
browser.switch_to.frame("__calendarIframe")
js2 = "document.getElementById(\"selectTodayButton\").click()"
browser.execute_script(js2)
browser.switch_to.parent_frame() # 3
js = "document.getElementById(\"q3_1\").click()"
browser.execute_script(js) # 4
browser.find_element_by_id("q4").send_keys("学号") # 5
browser.find_element_by_id("q5").send_keys("姓名") # 6
js = "document.getElementById(\"q6_1\").click()"
browser.execute_script(js) # 7
js = "document.getElementById(\"q7_3\").click()"
browser.execute_script(js) # 8
js = "document.getElementById(\"q8_1\").click()"
browser.execute_script(js)
browser.find_element_by_class_name("underline").send_keys("第一次1月9日阴性") # 9
js = "document.getElementById(\"q9_2\").click()"
browser.execute_script(js) # 10
js = "document.getElementById(\"q10_2\").click()"
browser.execute_script(js) # 11
js = "document.getElementById(\"q12_2\").click()"
browser.execute_script(js) # 12
browser.find_element_by_id("q14").send_keys("36."+str(random.randint(0,5))+"/36."+str(random.randint(0,5))) #13
js = "document.getElementById(\"q15_2\").click()"
browser.execute_script(js) #14
js = "document.getElementById(\"q17_2\").click()"
browser.execute_script(js) #15
browser.find_element_by_id("q19").click()
time.sleep(1)
browser.switch_to.frame("PDF_i_chezchenz")
browser.find_element_by_id("txtInput").send_keys("地址")
js3="document.getElementById(\"btnSearch\").click()"
browser.execute_script(js3)
time.sleep(1)
browser.find_element_by_css_selector("a.ensure_btn").click()
time.sleep(1)
browser.switch_to.default_content() # 16
js = "document.getElementById(\"q20_2\").click()"
browser.execute_script(js) # 17
browser.find_element_by_id("q22").send_keys("无") # 18
browser.find_element_by_id('select2-q23-container').click()
# js = "document.getElementById('select2-q23-container').click()"
# browser.execute_script(js)
browser.find_element_by_xpath("//li[@class='select2-results__option'][1]").click()
# js = "document.getElementById(\"select2-q23-result-ei9q-1\").click()"
# browser.execute_script(js) # submit
js = "document.getElementById(\"submit_button\").click()"
browser.execute_script(js) if __name__ == "__main__":
while True:
run()
time.sleep(4)
break
数据都填上了,可他来了一个这玩意

然后

之后了解到用用pyppeteer解决反爬的方法,安装python第三方库asyncio、pyppeteer和pyppeteer_stealth
完整代码如下:
import asyncio
from pyppeteer import launch
from pyppeteer_stealth import stealth #反爬
import random
import time
async def run():
driver = await launch({
# 谷歌浏览器的安装路径
'executablePath': 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
# Pyppeteer 默认使用的是无头浏览器
'headless': False,
# 设置Windows-size和Viewport大小来实现网页完整显示
'args': ['--no-sandbox', '--window-size=1024,768']
})
page = await driver.newPage()
await page.setViewport({'width': 1024, 'height': 768})
# 反爬虫跳入网页
await stealth(page)
await page.goto('网址')
time.sleep(1)
#1 问卷填报日期
date=await page.querySelector('#q1')
await date.click()
frame =page.frames
date2= await frame[1].querySelector('#selectTodayButton')
await date2.click()
#2 体温测量日期
date = await page.querySelector('#q2')
await date.click()
frame = page.frames
date2 = await frame[1].querySelector('#selectTodayButton')
await date2.click()
#3 班级
await page.click('#divquestion3 > ul > li > a')
#4 学号
await page.type('#q4','学号')
#5 姓名
await page.type('#q5','姓名')
# 6 性别
await page.click('#divquestion6 > ul:nth-child(2) > li:nth-child(1) > a')
#7 所在地区
await page.click('#divquestion7 > ul > li:nth-child(3) > a')
#8 核酸
await page.click('#divquestion8 > ul > li:nth-child(1) > a')
await page.type('#divquestion8 > ul > li:nth-child(1) > input.underline','第一次1月9日阴性')
#9 隔离情况
await page.click('#divquestion9 > ul > li:nth-child(2) > a')
#10 密切接触
await page.click('#divquestion10 > ul:nth-child(2) > li:nth-child(2) > a')
#12 病例
await page.click('#divquestion12 > ul:nth-child(2) > li:nth-child(2) > a')
#14 体温
temperature="36."+str(random.randint(2,6))+'/'+"36."+str(random.randint(2,6))
print(temperature)
await page.type('#q14',temperature)
#15 同住人员密切接触
await page.click('#divquestion15 > ul:nth-child(2) > li:nth-child(2) > a')
#17 同住人员病例
await page.click('#divquestion17 > ul:nth-child(2) > li:nth-child(2) > a')
#19 地理位置
address= await page.querySelector('#q19')
await address.click()
time.sleep(5)
frame=page.frames
await frame[2].type('#txtInput','地址')
time.sleep(1)
await frame[2].click('#btnSearch')
time.sleep(1)
await frame[2].click('.ensure_btn')
#20 居住地变化
await page.click('#divquestion20 > ul:nth-child(2) > li:nth-child(2) > a')
# 22 异常情况
await page.type('#q22','无')
#23 同住人员
await page.click('#select2-q23-container')
persion=await page.xpath("//li[@class='select2-results__option'][1]")
await persion[0].click()
time.sleep(2)
#提交
await page.click('#submit_button')
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(run())
就提交成功了!!!
使用Python自动填写问卷星(pyppeteer反爬虫版)的更多相关文章
- selenium+python+eclipse 实现 “问卷星”网站,登录与检查登录示例!
1.使用selenium+python+eclipse实现的登录"问卷星",问卷星访问地址:https://www.sojump.com/ 2.实现步骤:1)进入链接---首页-- ...
- python填写问卷星,疫情上报
#!!!注意:修改main里的url为真实的url,按需修改 50行 set_data中的submitdata # 61行 ip 修改为 真ip # submittype可能有错误,在151行 # 提 ...
- JavaScript——问卷星自动填写
一.前言: 我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的.但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表.一顿操作后,在github ...
- 通过Python实现自动填写调查问卷
0X00 前言 快开学了,看到空间里面各种求填写调查问卷的,我才想起来貌似我也还没做.对于这种无意义的问卷,我是不怎么感冒的,所以我打算使用”特技”来完成,也就是python,顺便重新复习一下pyth ...
- UI自动化填写问卷(selenium)+定时任务(懒人必备)
1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...
- Python爬虫与反爬虫(7)
[Python基础知识]Python爬虫与反爬虫(7) 很久没有补爬虫了,相信在白蚁二周年庆的活动大厅比赛中遇到了关于反爬虫的问题吧 这节我会做个基本分享. 从功能上来讲,爬虫一般分为数据采集,处理, ...
- selenium+python自动化用例登陆界面模板
一.基本逻辑 1.自动填写用户名和密码登录成功后跳转到相应页面 2.验证相应页面的url与给定的url是否一致,如果一致则测试通过,如果不一致则不通过 二.以jenkins登陆界面为例,代码如下 fr ...
- 大型企业都在用的Python反爬虫手段,破了它!
SVG 映射反爬虫 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人 ...
- 【HTML基础习题】HTML5+CSS3做问卷星登录页面
源代码下载地址:https://download.csdn.net/download/weixin_44893902/12839539 码云仓库地址: https://gitee.com/ynavc/ ...
随机推荐
- 优化 Webpack 的构建速度
1.使用高版本的 Webpack 和 Node.js 2.多进程/多实例构建:HappyPack(不维护了).thread-loader 3.压缩代码 webpack-paralle-uglify-p ...
- OI学习过程记录
这帖子本来是教练为了给低年级学生分享经验而让我写的学习经历,不过等我退役之后可能就变成回忆录了. 初三 WC 前:上了正睿的线上课程,练了一些模拟赛,同时也正在学文化课. 然后,莫名奇妙1膜考了全校前 ...
- 算法—— n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个 ...
- uni-app中组件的使用
组件基本知识点: uniapp中:每个页面可以理解为一个单页面组件,这些单页面组件注册在pages.json里,在组件关系中可以看作父组件. 自定义可复用的组件,其结构与单页面组件类似,通常在需要的页 ...
- STL——容器(List)List 的概念
1. List 容器的基本概念 1. list 是一个双向链表容器,可高效的进行插入删除元素,他的原理在于每个元素都有两个指针来记录前后两个元素的地址,像火车车厢一样,list 中各个元素在物理存储单 ...
- 腾讯游戏 K8s 应用实践|更贴近业务场景的 K8s 工作负载:GameDeployment & GameStatefulSet
引言 蓝鲸容器服务(Blueking Container Service,以下简称BCS)是腾讯 IEG 互动娱乐事业群的容器上云平台,底层基于腾讯云容器服务(Tencent Kubernetes E ...
- tp5使用PHPWord(下载引入/composer两种方式)
PHPWORD使用文档 一:引入 tp5.0,tp5.1: 1:composer方式(推荐) a:根目录下执行:composer require phpoffice/phpword b:引入: use ...
- 【Azure Redis 缓存】Azure Redis 服务不支持指令CONFIG
问题描述 在Azure Redis的门户页面中,通过Redis Console连接到Redis后,想通过CONFIG命令来配置Redis,但是系统提示CONFIG命令不能用. 错误消息为:(error ...
- java-02-基础语法
1.分支语句 if语句 格式 if(关系表达式1){语句1} else if(关系表达式2){语句2} else{语句3}; 说明 如果关系表达式1的值为true,执行语句1. 如果关系表达式2的值为 ...
- Cookie注入新方法
正常输 and 1=1 会有waf 进行拦截 判断一个网站是否支持cookie注入_> 现在是get ,你可以把参数放在post里面试试看看是否返回正常 用hackbar插件也 ...