python为什么叫爬虫,python爬取问卷星内容_python问卷星爬虫bug求助

 2023-09-28 阅读 37 评论 0

摘要:[TOC]python为什么叫爬虫,原bugMaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=9659): Max retries exceeded with url: /session/14150baedf86c6930897efe3675806f3/element (Caused by NewConnectionError(': Failed to establish a new c

[TOC]

python为什么叫爬虫,原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] 由于目标计算机积极拒绝,无法连接。'))

怎么提取问卷星数据?已解决:解决办法把打开浏览器执行自动填写后关闭改为打开标签页执行自动填写并关闭(先打开一个主标签页,然后打开副标签页进行问卷自动填写)

代码暂时只有单选和填空功能,期中填空为默认文本:没有### 配置环境:

python爬虫网页、slenium库,调用的对应浏览器驱动,此处为Chrome

[使用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('没有')

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

## 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:/chromedriver.exe")

driver.get('https://www.baidu.com')

for i in range(5):

js = "window.open('https://www.wjx.cn/jq/85695920.aspx')"

driver.execute_script(js)

# driver.get('https://www.wjx.cn/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:

####先滑到标签再去点击

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('没有')

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()

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/107246.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息