🌐
Python+Selenium+WSLの環境を作った (2022年3月)
タイトルの通りですが,手元のWindows 10 WSL環境 (Ubuntu 20.04.4 LTS)にSeleniumとGoogle Chromeをインストールしたので手順をメモしておきます.
やったこと
Google Chromeをインストールします.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
mv google-chrome-stable_current_amd64.deb ~/tmp/
cd ~/tmp/
sudo dpkg -i google-chrome-stable_current_amd64.deb
Seleniumとドライバをインストールします.ドライバのバージョンは上でインストールしたGoogle Chromeに合わせました.
pip install selenium
pip install chromedriver-binary==99.0.4844.51.0
動作確認
上のように単にWSL内でChromeとSeleniumの環境を用意し,特に何もしないでpythonから利用すると,X server/DISPLAY関係の設定で怒られると思います.
> /opt/google/chrome/chrome
[2887:2887:0328/235335.331706:ERROR:ozone_platform_x11.cc(234)] Missing X server or $DISPLAY
[2887:2887:0328/235335.331760:ERROR:env.cc(225)] The platform failed to initialize. Exiting.
この問題についてはこの記事では未対策です (というか上手い対応が毎回分からなかったり,上手くいったりいかなかったりします…).今回はheadlessのオプションをONにして利用してみます.簡単なプログラムでGoogleのトップページにアクセスして確認します.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
# headlessモード
option = Options()
option.add_argument('--headless')
driver = webdriver.Chrome(options=option)
# Googleのトップページにアクセスしてbs4でパース
url = "https://google.com"
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 出力
ll = filter(lambda x: len(x) > 0, soup.text.split(" "))
for elem in ll:
print(elem)
最後の出力を確認すると次が得られました.
Google
GoogleについてストアGmail画像ログイン×
削除
不適切な検索候補の報告
お腹がすいた冒険したい遊びたい気分星になった気分Doodle
を探そうトレンディーな気分芸術家気分笑いたい気分
Google
検索は次の言語でもご利用いただけます:
English
日本広告ビジネス
検索の仕組み
プライバシー規約設定検索設定検索オプション検索におけるデータ検索履歴ヘルプを検索フィードバックを送信ダークモード:
オフGoogle
アプリ
参考
Discussion