pyppeteer使用細節

windows下使用puppeteer

1,安裝puppeteer的python庫pyppeteernode

pip install pyppeteerpython

2,安裝chromium
第一次運行pyppeteer就會自動安裝chromium。linux

centos 安裝 puppeteer

windows 上安裝 puppeteer 很是的簡單,只要安裝了chrome瀏覽器,直接就能夠運行,但在 CentOS 上卻沒那麼簡單了,須要處理一大堆的依賴程序,因此把這個過程記錄下來,方便之後查閱。注意:Chrome已再也不支持 CentOS 6 ,因此要麼升級到CentOS 7或改用FireFox(聽說也再也不支持CentOS6了,並且也不兼容Puppeteer)。git

安裝puppeteer npm包
因爲防火牆的緣由,咱們不能直接訪問google,在安裝puppeteer npm包時,下載 chromium 的時候就會報錯。github

ERROR: Failed to download Chromium r543305! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.web

{ Error: connect ETIMEDOUT 172.217.160.112:443
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1173:14)
  errno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: '172.217.160.112',
  port: 443 
}

因此要使用鏡像安裝,輸入如下命令便可切換到鏡像下載:chrome

npm config set puppeteer_download_host=https://storage.googleapis.co...
若是上面鏡像壞了,報404,能夠試一下下面這個:npm

npm config set puppeteer_download_host=https://npm.taobao.org/mirror
而後像往常同樣安裝就能夠了。json

npm i puppeteer --save
安裝依賴包
若是直接運行,就會產生下面錯誤:windows

/some/path/root/node_modules/puppeteer/.local-chromium/linux-543305/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

因此咱們須要安裝依賴包,幸運的是yum裏已經有相應的包,因此命令很簡單:

sudo yum install google-chrome-stable
若是提示沒有這個包,那就須要添加google的源來下載,若是無法訪問google,那就須要找個鏡像了,把下面的url替換成鏡像的便可,添加文件/etc/yum.repo.d/google-chrome.repo:

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/ch...$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/lin...
若是沒法下載gpgkey,能夠把gpgcheck的值改成0(若是你不介意安全問題),再運行一次yum的安裝命令便可。

關閉沙盒模式
你覺得這樣就能夠了?哈哈,圖樣圖深破,你嘗試運行還會有一個sandbox的錯誤,若是你的環境是暴露的,建議按官方教程加上沙盒運行,不然像我這樣直接關閉就行,只要在js代碼中加上一個no-sandbox的參數便可。

const browser = await puppeteer.launch({args: ['--no-sandbox']});
字體缺失
某些服務器默認字體是不全的,須要手動安裝,若是出現相似如下錯誤就須要裝字體:

[0427/123834.275317:FATAL:platform_font_linux.cc(83)] Check failed: InitDefaultFont(). Could not find the default font
安裝方法很簡單,就用yum就能夠:

yum install ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y
到這裏,你的puppeteer應該就能夠了~

OSError: Unable to remove Temporary User Data

Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pyppeteer\launcher.py", line 201, in killChrome
    self._cleanup_tmp_user_data_dir()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pyppeteer\launcher.py", line 130, in _cleanup_tmp_user_data_dir
    raise IOError('Unable to remove Temporary User Data')
OSError: Unable to remove Temporary User Data

忘記關閉頁面致使的錯誤,

await page.waitFor(3000)
await page.close()

pyppeteer.errors.BrowserError: Failed to connect to browser

pyppeteer.errors.BrowserError: Failed to connect to browser port:http://127.0.0.1:59000/json/version

啓動時添加--disable-setuid-sandbox選項

const browser = await puppeteer.launch({
    headless: true,
   executablePath:'~/puppeteer/.local-chromium/linux-599821/chrome-linux/chrome',
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
  });

pyppeteer 瀏覽器類和websockets.protlcol類輸出巨量日誌解決辦法

將pyppeteer類和websockets.protlcol類的log設置爲WARNING級別,能夠避免WARINIG級別下的log輸出。此法,能夠節省程序打印無用日誌的時間和日誌佔用的巨大空間。

pyppeteer_level = logging.WARNING
logging.getLogger('pyppeteer').setLevel(pyppeteer_level)
logging.getLogger('websockets.protocol').setLevel(pyppeteer_level)

pyppeteer_logger = logging.getLogger('pyppeteer')
pyppeteer_logger.setLevel(logging.WARNING)

在github上崔大佬開了issue,討論避免pyppeteer類和websockets.protlcol類打印大量日誌的問題。github上issue地址

相關文章
相關標籤/搜索