UDs
@UDs

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonスクレイピング browserが表示されないときの対処方法

python初心者です
seleniumを使いサイトのマーケットにあるアイテムの名前と価格を取得しリストアップしようとしてました。
ですが、実行してみるとエラーが起きてしまいます。

エラーの理由と解決方法を教えてください。

実行コード.py
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time

options = webdriver.ChromeOptions()
options.add_argument("--headless")

browser = webdriver.Chrome(ChromeDriverManager().install())

url = "https://nft.amateras.io/#/app/NFTMarket"
browser.get(url)
time.sleep(15)

items = browser.find_elements(By.CLASS_NAME, "MyNFTList-card__name")


squares = []
for item in items:
    squares.append(item.text)
    print(item.text)

print(squares)

実行結果
[]
となってしまいます。

他のサイトでの検証では、問題なく情報を取得できましたがなぜでしょうか?

欲しい情報.html
<div data-v-9e31d492="" class="MyNFTList-card__name">
 <div data-v-9e31d492="">白山辰</div>
 <div data-v-9e31d492="">Dragon Car</div>
</div>
0

1Answer

ログインしていない状態でそのページを開いたとき、ちゃんと取得したい内容が表示されているでしょうか。

seleniumでは、普段使っているchromeのcookieを使用しなく、まっさらな状態でブラウザを立ち上げます。

上記のコードではログインせずにとってこようとしていますが、その状態でitemが表示されるものなのでしょうか。

ちなみに私が手動で上記URLにアクセスしたところこのようになりました。

image.png

一度--headlessモードではなく、実行時の画面を見てみたほうがいいかもしれません。

0Like

Comments

  1. @UDs

    Questioner

    実行画面ではアイテムがない状態が表示されていました。

    一度、ログインしてみるコードを書いてみようと思います。

    また、これは毎度ログインしなければいけないものなのでしょうか?
    こちらを定期実行して定期的にアイテムなどをリスト化しようと考えているのですが、何か良い方法はありますか?
  2. 私はログインが必要なサイトは特に面倒くさいことはないので、毎回ログインするようなコードを書いています。
    seleniumでブラウザを立ち上げるたびにログインは必要です。

    ただやったことはないのですが、seleniumでcookieを使用することはできるそうなので、毎回ログインしたcookieを読み込めばログインは省略できます。

    「selenium cookie」と検索してみてください。

    参考

    https://self-development.info/%E3%80%90python%E3%80%91selenium%E3%81%A7%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC%EF%BC%88%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%83%85%E5%A0%B1%EF%BC%89%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/

    https://techacademy.jp/magazine/33245
  3. @UDs

    Questioner

    ありがとうございます。

    ログインの処理コードを書こうと思ったのですが、こちらのサイトのログインは、chromeの拡張機能であるメタマスクといういわゆる仮想通貨ウォレットを利用しています。

    そのため、Googleにログイン?chromeを同期する必要があるのですが、可能なのでしょうか?
  4. メタマスクについては知識がないのでどのように使用するかわからないのですが、
    どうやら調べたところ拡張機能ありでブラウザを立ち上げることは可能みたいです。

    https://yuki.world/selenium-load-chrome-extension/

    https://self-development.info/%E3%80%90python%E3%80%91selenium%E3%81%A7chrome%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

    ただ拡張機能のボタンをクリックして入力したりいろいろやるというのは、
    ぱっと調べたところ難しそうです。
    (やったことがないので実際どうなのかわかりません。)

    そうなるとやはりcookieを使用したほうがいいかなと思います。
    (拡張機能でのログインを引き継げるかわかりませんが。)
  5. @UDs

    Questioner

    cookieを用いてメタマスクのログインまではできましたが、connect to wollet がクリックできないみたいです…

    なかなか諦めモード…

    cookieを使ってもログインできていなく、表示もされてないみたいでした…

    次の作戦としては、手動でHTMLファイルをコピーしてペーストし、アイテムをリスト化する方法を試してみます。
  6. @UDs

    Questioner

    cookieを使っていろいろいじってたらできてました
  7. うまく行ったようで何よりです。
    同じことで他の人も困っているかもしれないので、
    もし時間があればぜひQiitaで記事を書いてみてください。
  8. @UDs

    Questioner

    ありがとうございます。

    こちら最終的にflaskアプリにしてAWSで運用しようと考えているのですが、AWS linax2のos上で私のGoogleのcookieは使えるのでしょうか?
  9. すみません、cookieの扱いを熟知していないのと、AWSを使用したことがないので詳しいことはわからないです。

    しかしcookieは辞書形式の文字列だと思うので、最悪プログラム内に書いてしまえば使用できるかと思います。
  10. @UDs

    Questioner

    ありがとうございます。

    深堀して調べてみます。

Your answer might help someone💌