Selenium无头浏览器WebDriver [Errno 104] 连接被对等方重置

10

我正在尝试从以下URL抓取数据。但是当 driver.get(url) 时,有时会出现错误 [Errno 104] Connection reset by peer,有时则是 [Errno 111] Connection refused。但是在罕见的情况下它可以正常工作,并且在我的Mac电脑上使用真实浏览器时,同样的爬虫每次都能正常工作。因此,这与我的 spider 无关。

已经尝试了许多解决方案,例如等待页面上的选择器、隐式等待、使用selenium-requests传递正确的请求标头等,但似乎都没有起作用。

http://www.snapdeal.com/offers/deal-of-the-day
https://paytm.com/shop/g/paytm-home/exclusive-discount-deals

我正在使用pythonselenium无头Firefox webdriver来实现这个。操作系统是centos 6.5

注意:我有许多重度AJAX页面,已经成功抓取了其中一些,以下是部分列表。

http://www.infibeam.com/deal-of-the-day.html, http://www.amazon.in/gp/goldbox/ref=nav_topnav_deals

已经花了很多天的时间尝试排除问题,但没有成功。任何帮助都将不胜感激。

3个回答

17

经过多日的研究,终于找到了问题的原因。在此为社区的益处写下这篇文章。由于服务器缺乏RAM,无头浏览器运行失败,webdriver产生了奇怪的错误信息,真是pita

该服务器连续运行了60天而没有重启,在重启之后问题得到解决。通过将换页文件增加3倍,过去几天里未再遇到此问题。同时安排了一个任务清除页面文件缓存(http://www.yourownlinux.com/2013/10/how-to-free-up-release-unused-cached-memory-in-linux.html)。


7

谢谢!看起来降级后它能正常工作。希望它能一直这样表现 :) - Anubis

7

我已经使用Selenium和chromedriver(Python3)进行网络爬虫一段时间了。随着最新的Google Chrome更新,我不得不处理两个问题。

1)webdriver启动错误:

解决方法:我必须添加“no-sandbox”参数。

chrome_options.add_argument('--no-sandbox')

2)[Errno 104]连接被对等方重置:

解决方法:似乎存在套接字和HTTP请求的问题。可能是网页内容太大或者你没有给页面足够的加载时间。至少这就是我想的。 我将最大页面加载时间设置为60秒,看起来效果很好。

driver.set_page_load_timeout(60)

我在webdrivers初始化之间添加了一个小延迟,这似乎也有所帮助。

time.sleep(0.5)


你是指 "--no-sandbox" 吗?还是应该去掉前面的两个连字符? - Anubis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接