Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ブラウザでは普通に見られるのに、スクレイピングできないページがある

解決したいこと

https://www .nespresso.com/jp/ja/order/capsules/original
↑(アクセスログが残って対策されてしまうとまずいので、リンクで飛ばないようにwwwの後にスペースを入れています)

上記ページの情報一覧を取得したいと考えていますが、seleniumを使ったコードからは、
うまくページがレンダリングできません。リンクもクリックすると、通常のブラウザの
挙動とは異なり、Access Denied となってしまいます。
これらのレンダリングが正しく行えるようにし、画像やタイトル、リンク先の情報を取得したいです。

発生している問題・エラー

画像やページが途中までは読み込めているが、途中から読み込まれなくなる。

該当するソースコード

from selenium import webdriver
# brew install --cask chromedriver

browser = webdriver.Chrome() # Mac
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36') #追加
browser.implicitly_wait(5)
url = "https://www.nespresso.com/jp/ja/order/capsules/original"
browser.get(url)
time.sleep(10)

自分で試したこと

urllib.request+beautifulsoap4でも試していましたが、こちらもuser-agentを指定すると、なぜか返答が戻ってきませんでした。

0

3Answer

作った options をブラウザに渡していないせいで User Agent が変わっていないからだと思います。以下のように渡してください。

options = webdriver.ChromeOptions()
options.add_argument(f'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36') #追加
browser = webdriver.Chrome(options=options) # Mac
1Like

Comments

  1. @TaroNakasendo

    Questioner

    上記を試してみましたが、残念ながら同様の結果となってしまいました。

Comments

  1. @TaroNakasendo

    Questioner

    ありがとうございます。解決しました。

    options.add_argument("--disable-blink-features=AutomationControlled")
    browser = webdriver.Chrome(options=options)

    を足すことにより、

    is_webdriver = browser.execute_script('return window.navigator.webdriver;')
    print(f'window.navigator.webdriver: {is_webdriver}')

    で、navigator.webdriverが、True → False になり最後まで表示されるようになりました。

ソースコードを読んでいませんが、よくあるパターンを回答しておきます。
よくあるのは、JavaScriptで動的ページをレンダリングしていたり、遅延レンダリングしている場合。
JavaScriptで認証キーを生成たりクッキーやCORSで制限しているページなら Access Denied になってもおかしくないです。

0Like

Comments

  1. @TaroNakasendo

    Questioner

    その場合、普通のブラウザと同様の動きをさせて、ブラウザ相当の表示にすることはできないのでしょうか。

Your answer might help someone💌