鱼C论坛

 找回密码
 立即注册
查看: 3427|回复: 1

[已解决]关于爬虫'Connection aborted.'的报错

[复制链接]
发表于 2023-2-15 13:55:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1.     # 获取全部标签页
  2.     window = driver.window_handles
  3.     # 将激活标签页设置为最新的一项(按自己业务改)
  4.     time.sleep(1)
  5.     driver.switch_to.window(window.pop())
  6.     print("11")
  7.     time.sleep(1)
  8.     #获取当前页面的url
  9.     currenturl = driver.current_url
  10.     print(currenturl)
复制代码

ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
请教大佬们这行代码报了这个错是什么原因?应该怎么修改?之前都可以运行的。

完整代码
  1. def get_guangfa():
  2.     # #这个是一个用来控制chrome以无界面模式打开的浏览器
  3.     # #创建一个参数对象,用来控制chrome以无界面的方式打开
  4.     # chrome_options = Options()
  5.     # #后面的两个是固定写法 必须这么写
  6.     # chrome_options.add_argument('--headless')
  7.     # chrome_options.add_argument('--disable-gpu')
  8.     # #驱动路径 谷歌的驱动存放路径
  9.     # path = 'chromedriver\\chromedriver.exe'
  10.     # #创建浏览器对象
  11.     # driver = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)

  12.     s = requests.Session()
  13.    
  14.     fb = webdriver.FirefoxProfile.DEFAULT_PREFERENCES
  15.     # op = webdriver.FirefoxOptions()
  16.     # op.set_preference({'user-data-dir':''})
  17.     c = webdriver.ChromeOptions()
  18.     c.add_argument('--user-data-dir=D:/AutomationProfile')
  19.     c.add_argument('--headless')
  20.     # c.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36')
  21.     driver = webdriver.Chrome()
  22.    
  23.     driver.get('https://rd.gfqh.cn/RDInformation/menu/235')  
  24.    
  25.     time.sleep(5)
  26.     #点击模块
  27.     #div.login-modal 如果有好多分支,需要加.login-modal来区别一下,没有的话就直接div,一直到div.form-button-login为登录的同级
  28.     #driver.find_element(by=By.CSS_SELECTOR,value='body > div.login-modal > div > div.login-common-form > div.form-button > div.form-button-login').click()
  29.     driver.find_element(By.XPATH, '//li[text()="能源化工"]').click()
  30.     time.sleep(3)
  31.    
  32.    
  33.     now = datetime.datetime.now()
  34.     now = str(now)
  35.     now=now[0:10]
  36.     date=now.replace("-","")
  37.    
  38.     open_f=1
  39.     while open_f !=0:   
  40.         try:
  41.             #print(date)
  42.             
  43.             driver.find_element(By.XPATH, f'//div[text()="{date}广发期货能源化工周报汇总"]').click()
  44.             #print(date+"2")
  45.             time.sleep(2)
  46.             open_f = 0
  47.             
  48.         except:
  49.             date=int(date)-1
  50.             date=str(date)  
  51.    
  52.    

  53.     # 获取全部标签页
  54.     window = driver.window_handles
  55.     # 将激活标签页设置为最新的一项(按自己业务改)
  56.     time.sleep(1)
  57.     driver.switch_to.window(window.pop())
  58.     print("11")
  59.     time.sleep(1)
  60.     #获取当前页面的url
  61.     currenturl = driver.current_url
  62.     print(currenturl)
复制代码
最佳答案
2023-5-31 19:07:37
这个错误(`ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))`)可能是由于在网络连接过程中出现问题,可能是服务器关闭连接,也可能是网络问题,或者是浏览器驱动程序的问题。你的代码看起来是在使用 Selenium 和 webdriver 来进行网络爬虫操作,这种问题可能是在与webdriver进行通信的时候出现的。

尝试以下几种解决方法:

1. 检查你的网络连接。 确保你的机器可以稳定地连接到网络,没有任何网络阻塞或临时断开的问题。

2. 更新你的webdriver。 如果你正在使用的webdriver版本过旧,可能会有一些兼容性问题。去webdriver的官方网站,下载并安装最新版本的webdriver。

3. 使用代理服务器。 有时,网络问题可能是由于服务器端的防爬策略导致的。你可以试着使用代理服务器来绕过这个问题。

4. 增加重试机制。 你可以添加一个重试机制,当出现网络错误时,代码会尝试重新连接。

5. 增加延迟。在请求不同的网页时,添加一些延迟,防止被服务器识别为机器人。

以下是使用 Selenium 的 webdriver 时添加重试机制的一个例子:


  1. from selenium import webdriver
  2. from selenium.common.exceptions import WebDriverException
  3. import time

  4. def get_url_with_retry(driver, url, retries=3, delay=5):
  5.     for i in range(retries):
  6.         try:
  7.             driver.get(url)
  8.             return
  9.         except WebDriverException:
  10.             print(f"Failed to load {url}, retrying in {delay} seconds...")
  11.             time.sleep(delay)
  12.     raise WebDriverException(f"Failed to load {url} after {retries} retries")

  13. # 使用这个函数获取url
  14. driver = webdriver.Chrome()
  15. get_url_with_retry(driver, 'https://rd.gfqh.cn/RDInformation/menu/235')
复制代码


在这个例子中,如果`driver.get(url)`在连接时抛出`WebDriverException`,代码会延迟一段时间后再次尝试。如果在指定次数的重试后仍无法加载页面,那么将会抛出一个异常。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-31 19:07:37 | 显示全部楼层    本楼为最佳答案   
这个错误(`ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))`)可能是由于在网络连接过程中出现问题,可能是服务器关闭连接,也可能是网络问题,或者是浏览器驱动程序的问题。你的代码看起来是在使用 Selenium 和 webdriver 来进行网络爬虫操作,这种问题可能是在与webdriver进行通信的时候出现的。

尝试以下几种解决方法:

1. 检查你的网络连接。 确保你的机器可以稳定地连接到网络,没有任何网络阻塞或临时断开的问题。

2. 更新你的webdriver。 如果你正在使用的webdriver版本过旧,可能会有一些兼容性问题。去webdriver的官方网站,下载并安装最新版本的webdriver。

3. 使用代理服务器。 有时,网络问题可能是由于服务器端的防爬策略导致的。你可以试着使用代理服务器来绕过这个问题。

4. 增加重试机制。 你可以添加一个重试机制,当出现网络错误时,代码会尝试重新连接。

5. 增加延迟。在请求不同的网页时,添加一些延迟,防止被服务器识别为机器人。

以下是使用 Selenium 的 webdriver 时添加重试机制的一个例子:


  1. from selenium import webdriver
  2. from selenium.common.exceptions import WebDriverException
  3. import time

  4. def get_url_with_retry(driver, url, retries=3, delay=5):
  5.     for i in range(retries):
  6.         try:
  7.             driver.get(url)
  8.             return
  9.         except WebDriverException:
  10.             print(f"Failed to load {url}, retrying in {delay} seconds...")
  11.             time.sleep(delay)
  12.     raise WebDriverException(f"Failed to load {url} after {retries} retries")

  13. # 使用这个函数获取url
  14. driver = webdriver.Chrome()
  15. get_url_with_retry(driver, 'https://rd.gfqh.cn/RDInformation/menu/235')
复制代码


在这个例子中,如果`driver.get(url)`在连接时抛出`WebDriverException`,代码会延迟一段时间后再次尝试。如果在指定次数的重试后仍无法加载页面,那么将会抛出一个异常。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表