scrapy+报错pyppeteer.errors.BrowserError: Browser closed unexpectedly:解决办法


运行环境 Runtime environment

1
2
3
4
5
6
操作系统: Windos10  
IDE: pycharm 2021.3.1 x64
语言: python v3.9.1
框架: Scrapy v2.4.1
----
gerapy-pyppeteer 0.0.13

症状

在centos服务器上部署scrapty+gerapy-pyppeteer,运行

1
2
pyppeteer.errors.BrowserError: Browser closed unexpectedly:
[ERROR] Running as root without --no-sandbox is not supported. See https://crbug.com/638180

问题原因

于是我去扒拉的一下gerapy-pyppeteer封装的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
async def _process_request(self, request, spider):
"""
use pyppeteer to process spider
:param request:
:param spider:
:return:
"""
options = {
'headless': self.headless,
'dumpio': self.dumpio,
'devtools': self.devtools,
'args': [
f'--window-size={self.window_width},{self.window_height}',
]
}
if self.pretend:
options['ignoreDefaultArgs'] = [
'--enable-automation'
]
if self.executable_path:
options['executablePath'] = self.executable_path
if self.ignore_https_errors:
options['ignoreHTTPSErrors'] = self.ignore_https_errors
if self.slow_mo:
options['slowMo'] = self.slow_mo
if self.ignore_default_args:
options['ignoreDefaultArgs'] = self.ignore_default_args
if self.handle_sigint:
options['handleSIGINT'] = self.handle_sigint
if self.handle_sigterm:
options['handleSIGTERM'] = self.handle_sigterm
if self.handle_sighup:
options['handleSIGHUP'] = self.handle_sighup
if self.auto_close:
options['autoClose'] = self.auto_close
if self.disable_extensions:
options['args'].append('--disable-extensions')
if self.hide_scrollbars:
options['args'].append('--hide-scrollbars')
if self.mute_audio:
options['args'].append('--mute-audio')
if self.no_sandbox:
options['args'].append('--no-sandbox')
if self.disable_setuid_sandbox:
options['args'].append('--disable-setuid-sandbox')
if self.disable_gpu:
options['args'].append('--disable-gpu')
1
2
if self.no_sandbox:
options['args'].append('--no-sandbox')

gerapy-pyppeteer封装的时候已经把沙盒参数加入了进去,那就说明不是这个问题。

既然是centos首次安装使用gerapy-pyppeteer,那会不会就是有关的环境和依赖没有安装完全。

解决办法

把pyppeteer所需要的依赖安装完整。

centos 系统的命令如下

1
yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y

ubuntu 系统的命令如下

1
apt-get install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y

根据自己的需要添加sudo

总结

scrapy + gerapy-pyppeteer 优雅组合,实现scrapy的动态爬虫。

数据量小,5W数据以下可以玩玩。数据量大,妥妥内存溢出…