赞
踩
如题,我在学习oython,selenium时遇到了" [WinError 10061] 由于目标计算机积极拒绝,无法连接。" 的报错。通过上网查资料我发现有很多篇的解决方法都是在设置代理上,而我一直都没有使用代理但还是出现了这个错误,后来通过我自己测试了一段时间后我发先问题可能是出现在了我的代码上,以下是我的排错过程:
这是我最开始的代码:
- from selenium import webdriver
- from bs4 import BeautifulSoup
- import time
- chromedriver = 'C:/Users/ASUS/AppData/Local/Programs/Python/Python38/chromedriver.exe'
- # =========防止浏览器自动关闭的关键============
- option = webdriver.ChromeOptions() #创建了一个ChromeOptions对象
- option.add_experimental_option("detach", True) #在ChromeOptions对象中加入一个实验性的选项detach并设置其值为True,其作用是实现在程序运行完毕后不要关闭浏览器
- # ===========================================
- browser = webdriver.Chrome(chromedriver,options=option) #应用刚才所创建的option对象
- browser.get('https://wpblog.x0y1.com') #获取所有网页加载完毕后的所有数据,包括通过api请求的数据
- time.sleep(2)
- p_list = browser.find_elements(by='tag name',value='p')
- browser.quit()
- for i in p_list:
- print(i.text)
但在运行后出现了如下错误:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "e:/安全方向课程/python/python爬虫/selenium的使用.py", line 14, in <module>
print(p.text)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 90, in text
return self._execute(Command.GET_ELEMENT_TEXT)["value"]
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 403, in _execute
return self._parent.execute(command, params)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 438, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 290, in execute
return self._request(command_info[0], url, body=data)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 311, in _request
response = self._conn.request(method, url, body=body, headers=headers)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\request.py", line 74, in request
return self.request_encode_url(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\request.py", line 96, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\poolmanager.py", line 376, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 815, in urlopen
return self.urlopen(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 815, in urlopen
return self.urlopen(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 815, in urlopen
return self.urlopen(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=17245): Max retries exceeded with url: /session/82fca1b62e10dbc512e7224da613b70c/element/4307BB85929AF7D5759CE2E3A87B7AAD_element_4/text (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002521DE25850>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))
通过最后上述报错信息中的红色部分我猜测vscode是通过去向http://127.0.0.1:17245/ 发起请求得到已经位于本地的网页源码后,然后再通过find_elements()方法去提取目标数据。那么根据最后一行的报错信息显示 "由于目标计算机积极拒绝,无法连接。",我猜测此时这个17245的端口应该是没有开启的。然后我通过netstat -a -n -p tcp再windows的shell里看了,这个tcp连接列表里确实没有这个条目。所以此时有很大概率是我的代码出了问题。然后据我学习到的内容来看selenium库的初衷是实现浏览器自动化。所以可能在我之前通过browser.quit()关闭浏览器后,我的电脑就已经释放了本次请求所拉取的html源码,即本机关闭了17245端口从而导致了上述的错误。
以下是我修改后的代码:
- from selenium import webdriver
- from bs4 import BeautifulSoup
- import time
- chromedriver = 'C:/Users/ASUS/AppData/Local/Programs/Python/Python38/chromedriver.exe'
- # =========防止浏览器自动关闭的关键============
- option = webdriver.ChromeOptions() #创建了一个ChromeOptions对象
- option.add_experimental_option("detach", True) #在ChromeOptions对象中加入一个实验性的选项detach并设置其值为True,其作用是实现在程序运行完毕后不要关闭浏览器
- # ===========================================
- browser = webdriver.Chrome(chromedriver,options=option) #应用刚才所创建的option对象
- browser.get('https://wpblog.x0y1.com') #获取所有网页加载完毕后的所有数据,包括通过api请求的数据
- time.sleep(2)
- p_list = browser.find_elements(by='tag name',value='p')
- for i in p_list:
- print(i.text)
- browser.quit()
这次就成功的获得了运行结果:
爬虫示例站点
近期在群里看到有小伙伴问,“如何脱离扇贝的环境,在自己的电脑里运行 Python 代码?”。是的,这是一个很好的问题。我们学 Python 是要在真实环境当中 使用的,接下来我来给大家介绍一下搭建 Python 环境的常用方法。
继续阅读
“Python 环境搭建指南”提到进位制,大家应该都对十进制比较熟悉,因为生活中大都使用十进制的,我们从小学就开始学习十进制的四则运算。既然人类对十进制这么熟悉,为什么计 算机不和人类使用一样的进制呢?
继续阅读
“理解二进制难倒了很多人?别急,小贝马上教会你”
[13552:16472:0811/112950.641:ERROR:page_load_metrics_update_dispatcher.cc(178)] Invalid first_paint 0.496 s for first_image_paint 0.494 s“我累了,需要很长时间的休息”
在 2018 年 7 月的一份名为“权力转移”的邮件列表帖子中,Guido van Rossum 写道:
“我不想再为 PEP 劳神了,而且尽管我做着艰难的决定,却发现仍然有很多人不满意。”继续阅读
“因为他,Python 成为当下最红编程语言”
该错误主要是我对selenium理解不深导致,写这篇博客主要是主要有两个原因,一方面是便于自己以后的复习,另一方面是因为我在找这个问题的答案时找了很久但都没解决,如果你也遇到同样的问题希望我能给你带来一些帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。