selenium+chromedriverサーバで実行
4809 ワード
selenium+chromedriverサーバで実行
1.はじめに
seleniumを使用してWebサイトからデータをキャプチャしようとしますが、phantomjsを使用するとエラーが発生することがあります.chromeは現在もインタフェースの動作モードがないので、後でphantomjsを使わなくてもいいです.
しかし、サーバにchromeをインストールするときにいくつかのエラーが発生しました.ここでは、インストールプロセス全体をまとめます.
2.ubuntuにchromeをインストールする
# Install Google Chrome
# https://askubuntu.com/questions/79280/how-to-install-chrome-browser-properly-via-command-line
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb # Might show "errors", fixed by next line
sudo apt-get install -f
この場合、すでにインストールされているはずです.下のコマンドでテストを実行します.google-chrome --headless --remote-debugging-port=9222 https://chromium.org --disable-gpu
ここではheadlessモードを使用してリモートデバッグを行います.ubuntuにはgpuがないことが多いので、-disable-gpuはエラーを報告しないようにします.その後、sshを開いてサーバに接続し、コマンドラインを使用してサーバのローカル9222ポートにアクセスできます.curl http://localhost:9222
インストールが完了すると、デバッグ情報が表示されます.しかし、私はここで間違いを報告します.下は間違いの解決方法です.
1)可能なエラー解決方法
上のコマンドを実行すると、rootでchromeを実行できないエラーが表示される可能性があります.この時は下の方を使ってchromeをセットします
1.google-chromeファイルを見つける私の場所は/opt/google/chrome/2にあります.viでgoogle-chromeファイルを開くvi /opt/google/chrome/google-chrome
ファイルで検索exec -a "$0" "$HERE/chrome" "$@"
3.後で-user-data-dir-no-sandboxを追加すればいい、shellコマンド全体がexec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox
4.Google-chromeを再度開くと正常にアクセスできます!
3.chromeドライバをインストールchromedriver
chromedriver chromedriverをダウンロードすると、chromeを操作するapiが提供され、seleniumがchromeを制御する橋渡しになります.
chromedriverは最新版をインストールしたほうがいいです.私が最初にインストールしたのは最新版ではありません.間違いを報告します.最新版のchromedriverで問題なくて、最新版のは下の住所で探し当てることができますhttps://sites.google.com/a/chromium.org/chromedriver/downloads
私がこの文章を書いたときの最新版は2.37です.wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
ここまでサーバー側のインタフェースレス版chromeがインストールされています.
4.インタフェースレス版chromeの使い方
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("user-agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'")
wd = webdriver.Chrome(chrome_options=chrome_options,executable_path='/home/chrome/chromedriver')
wd.get("https://www.163.com")
content = wd.page_source.encode('utf-8')
print content
wd.quit()
ここでchrome_optionsの3番目の設定パラメータでは、この設定を使用して、Webサイトが無境界モードを使用して逆キャプチャを使用していることを検出することを避けることができます.
下の2つの設定は、設定を行わない場合にデスクトップ版linuxシステム、またはmacシステムでインタフェースのあるchromeが開きます.デバッグ時に落下エッジの2行にコメントしてインタフェース版chromeを使用してプログラムをデバッグできます.chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
5.参考
https://jiayi.space/post/zai-ubuntufu-wu-qi-shang-shi-yong-chrome-headless https://blog.csdn.net/u013703963/article/details/71083802
# Install Google Chrome
# https://askubuntu.com/questions/79280/how-to-install-chrome-browser-properly-via-command-line
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb # Might show "errors", fixed by next line
sudo apt-get install -f
google-chrome --headless --remote-debugging-port=9222 https://chromium.org --disable-gpu
curl http://localhost:9222
vi /opt/google/chrome/google-chrome
exec -a "$0" "$HERE/chrome" "$@"
exec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox
wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument("user-agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'")
wd = webdriver.Chrome(chrome_options=chrome_options,executable_path='/home/chrome/chromedriver')
wd.get("https://www.163.com")
content = wd.page_source.encode('utf-8')
print content
wd.quit()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')