python + selenium + chromeでHTMLを読み込みたい
https://www.coin-laundry.co.jp/userp/shop_detail/10000543.html
上記サイトから稼働状況のテーブルを抜き出したいと考えています。
テーブル部分がjavascriptで生成されているようなので、headlessブラウザ(Chrome)をseleniumから操作して取得しようとコードを書いてみました。
import time
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-desktop-notifications')
options.add_argument("--disable-extensions")
options.add_argument('--allow-running-insecure-content')
options.add_argument('--disable-web-security')
options.add_argument('--no-sandbox')
options.add_argument('--lang=ja')
options.add_argument('--window-size=1200x600')
driver = webdriver.Chrome(chrome_options=options)
# URLを開く
TARGET = 'https://www.coin-laundry.co.jp/userp/shop_detail/10000543.html'
driver.get(TARGET)
time.sleep(2) # とりあえず適当に2秒待つ。
page_source = driver.page_source
html = BeautifulSoup(page_source, 'html.parser')
print(html)
driver.quit() # ブラウザーを終了する。
このコードを実行すると、最初に書いたサイトに限り
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
としか返ってきません。
javascriptをレンダリングする前のHTMLも取得できません。
time.sleep()の時間も色々変えてみましたが、結果は同じ。
TARGETの部分を他のURLにした場合は、ちゃんとHTMLコードが出力されます。
selenium + Phantomjs2.1.1 や casperjs + Phantomjs2.1.1も試してみましたが、結果は同様でうまく取得できませんでした。
実行環境は
サーバ AWS EC2
OS Ubuntu 16.04
Python 3.5.2
selenium
Google Chrome 60.0.3112.90
BeautifulSoup4
node 8.2.1
最初はPhantomjsを使ってやっていたのですが、上記サイトだけどうしても取得できませんでした。ブラウザの問題かと思い、リモートデスクトップでUbuntu上のChromeでアクセスしたところ、普通に表示ました。なのでChromeのHeadlessモードなら通常モードと同じように取得できると思ったのですが・・・。
八方塞がりで途方に暮れている次第です。
よろしくお願いいたします。