Pythonユーザおなじみの快適開発環境PyCharm。
エディタと色々でガンバルよりも、このIDEを使うだけで開発の楽さが3割くらい改善する素敵ツール。 デバッガはモチロン、VCSも繋がるし、SFTPとかでコードデプロイも出来るし、保存タイミングでの自動デプロイも結構便利。
PyCharmを使い始める前はお名前.com VPSやさくらのVPS 上でエディタでガリガリやって、そのままVPSに入れたChromeで動かしていたけど、IDEをローカルに入れたらローカルで走らせたいので、今回はスクレイピングツール開発のためのChromeヘッドレス環境をPyCharmプロジェクト内で作る。 別にPyCharm関係なくWindowsでの開発の話だけど。
PyCharmの標準Pythonアプリでプロジェクトを作ったら、SeleniumをPIPで入れて、ChromedriverとChrome binaryを用意する。
Chromeは普通に使ってるから、既存のChromeを開発に使いたくないので、Potrableを導入して作る。
Chrome Driverはここから入手
記事時点で Chromedriver 74.0.3729.6 を選択。
展開して出てきたChromedriver.exeをPyCharmプロジェクトディレクトリに放り込む(スタイル的にはサブディレクトリに入れた方が綺麗)
続いてChrome Binaryをここから入手
PortableAppsのビルドで、Chromeインストール済みでも未インストールでも動かせるんでアプリと一緒に持ち運びやすい。 記事時点で GoogleChromePortableDev_74.0.3724.8_online.paf.exe を選択。
インストーラなので実行してディレクトリに展開、そのファイル一式をChromedriver同様にプロジェクトディレクトリに放り込む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# coding: utf-8 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import lxml.html chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.binary_location = '.\\googlechromeportable.exe' driver = webdriver.Chrome('.\\chromedriver.exe', chrome_options=chrome_options) driver.set_window_size(1920, 1080) driver.get('https://target.tld/') WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.TAG_NAME, 'body'))) dom = lxml.html.fromstring(driver.page_source) |
1920×1080の描画領域のChromeを立ち上げて、target.tldを取得して、BODYのロードが終わるまで待機し、ページソースをlxml.htmlでパースしてDOMにするまで。 urllibとかで拾ってくるとJSとか遅延ロードが面倒だけど、Chromeで実行すれば普通に開いた状態になるので、それだけでもWebページアクセスには便利。
lxmlのdomに落とせばxpathとかでデータを拾うことも出来るし、あるいはSelenium側で辿ることも出来るけど、やり方は色々あるので今回は書かないでおく。
とりあえず、Windows環境でポータブルなChrome headlessの開発環境を用意するメモ。
(389)