python爬取问卷星内容_python问卷星爬⾍bug求助
[TOC]
原bug
MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=9659): Max retries exceeded with url:
/session/14150baedf86c6930897efe3675806f3/element (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] 由于⽬标计算机积极拒绝,⽆法连接。'))
已解决:解决办法把打开浏览器执⾏⾃动填写后关闭改为打开标签页执⾏⾃动填写并关闭(先打开⼀个主标签页,然后打开副标签页进⾏问卷⾃动填写)
代码暂时只有单选和填空功能,期中填空为默认⽂本:没有### 配置环境:
slenium库,调⽤的对应浏览器驱动,此处为Chrome
抗锯齿[使⽤python实现问卷星⾃动答题功能——基础篇]
(对标签解析)
random库实现随机选择
定位题⽬对应标签
from selenium import webdriver
import random
打开问卷星
driver = webdriver.Chrome()
<('www.wjx/jq/22452252.aspx')
利⽤CSS选择器对页⾯进⾏解析
我们发现,我们所有的题⽬的回答的选项的标签都在li标签⾥⾯,所以我们到li标签。
ans=answer.find_elements_by_css_selector(‘li’)
####先滑到标签再去点击
### 到标签
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')
但是我们要想实现快速的填写,我们还得进⾏浏览器的关闭(因为浏览器开⼀次只能填⼀次,所以可以让它⾃动关闭),然后我们在使⽤⼀个循环,进⾏不断的开关浏览器,即可实现不停的填写问卷
driver.quit()
进⼀步:利⽤try catch跳过⽆法作答的题避免死循环
⾸先我们获得了answer之后,我们得避免⼀些问题导致我们的代码出现红字,于是我们使⽤try来避免报错(这个原因是,有些题⽬我们不能作答,但是使⽤死的代码会发⽣卡死的现象。)举个简单的例⼦,当我们遇到⼀个分叉的时候,⽐如有的题⽬,你选了否就会答第五题,选了是就会答第六题,这样⼦虽然我们会获取到五和六的题⽬的div,但是却不能两者都答,如果不使⽤try的话,会导致代码报错不能运⾏,我们使⽤try这样⼦就可以保持即使这题答不了,也只会把异常抛出,然后我们依然会往后做(这样⼦就从另⼀个⾓度来解决了分叉的问题)。
进⼀步:模拟滑动浏览器如何扫描二维码
因为问卷星肯定不是只有⼏题的,肯定是有很多道题的,所以我们要滑动浏览器(因为我们使⽤的点击只是模仿⼈的操作,⼈肯定是不能到⾃⼰看不到的地⽅答题的)使⽤ute_script(“arguments[
0].scrollIntoView();”,answer)来进⾏浏览器的滑动
思路⼀完整代码
from selenium import webdriver
import random
driver = webdriver.Chrome()
<('www.wjx/jq/22452252.aspx')
answers = driver.find_elements_by_css_selector('.div_question')
for i in range(5):
for answer in answers:
try:
####先滑到标签再去点击
六一快乐英文
### 到标签
ans=answer.find_elements_by_css_selector('li')
if not ans:
text=answer.find_element_by_css_selector('textarea')
text.send_keys('没有')
continue
lsans=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(': Failed to establish a new connection: [WinError 10061] 由于⽬标计算机积极拒绝,⽆法连接。'))
# -*- coding: utf-8 -*-
打开excel很慢## kof21411⼤佬解决bug后的代码
"""
Created on Sun Jul 19 15:39:40 2020
@author: Lenovo
"""
from selenium import webdriver
import random
driver = webdriver.Chrome()
# driver = webdriver.Chrome(executable_path="C:/")
<('www.baidu')
for i in range(5):
js = "window.open('www.wjx/jq/85695920.aspx')"
# ('www.wjx/jq/22452252.aspx')
handlers =driver.window_handles
driver.switch_to_window(handlers[1])
answers = driver.find_elements_by_css_selector('.div_question')
for answer in answers:
try:
####先滑到标签再去点击
### 到标签
ans=answer.find_elements_by_css_selector('li')
if not ans:
头发多适合什么发型text=answer.find_element_by_css_selector('textarea')
text.send_keys('没有')
continue
lsans=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()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论