python + selenium + chromeでHTMLを読み込みたい


<https://www.coin-laundry.co.jp/userp/shop_detail/10000543.html>  
上記サイトから稼働状況のテーブルを抜き出したいと考えています。

テーブル部分がjavascriptで生成されているようなので、headlessブラウザ（Chrome)をseleniumから操作して取得しようとコードを書いてみました。

[code]

    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()  # ブラウザーを終了する。
    
[/code]

このコードを実行すると、最初に書いたサイトに限り

[code]

    <html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
    
[/code]

としか返ってきません。  
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モードなら通常モードと同じように取得できると思ったのですが・・・。

八方塞がりで途方に暮れている次第です。  
よろしくお願いいたします。




https接続に失敗していないでしょうか。  
Seleniumで動かす前に、まずその環境のブラウザーと、Seleniumの実行ユーザーで、本当にエラー無く対象のページにアクセスできているか確認してみましょう。

> リモートデスクトップでUbuntu上のChromeでアクセスしたところ、普通に表示ました。

おそらくここに見落としがあります。  
件のサイトへのアクセス時には中間CA証明書が必要になりますが、これがUbuntuにインストールされていないので、httpsでの接続が失敗しているはずです。  
対応する中間CA証明書を、Linux版Chromiumでの管理手順にしたがいインストールしましょう。  
<https://chromium.googlesource.com/chromium/src/+/lkcr/docs/linux_cert_management.md>

