🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

1204閲覧

Selenium で 要素の選択が できない

ruei

総合スコア284

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/01/20 18:59

編集2021/01/21 12:00

商品ページ の AU $699.00 の部分を Selenium で取得したいと考えております。

イメージ説明

The listing you're looking for has ended. に飛ばされる場合は、view original item をクリックしてください。

次のようなコードを書きました。

Python

1import chromedriver_binary 2from selenium import webdriver 3driver = webdriver.Chrome() 4url = "https://www.ebay.com/itm/Roland-MT-32-Sound-Module-/224200244704?_trksid=p2349526.m4383.l10137.c10&nordt=true&rt=nc&orig_cvip=true" 5driver.get(url) 6driver.find_element_by_class_name("notranslate vi-VR-cvipPrice").text

この class の要素であることは chrome developer tool を使って確かめました。

しかし、

Traceback (most recent call last): File "C:\Users\user\PycharmProjects\pythonProject\tmp.py", line 6, in <module> driver.find_element_by_class("notranslate vi-VR-cvipPrice").text AttributeError: 'WebDriver' object has no attribute 'find_element_by_class'

というエラーが発生します。

指定する class を "u-flL w29 vi-price-np" に変更しても同様です。

解決策をご教授ください。

更新:2021/01/21
申し訳ありません、上の現象は検索結果から遷移したページにおいて発生することが分かりました。
つまり、下記のようなコードです。こちらの場合はまだ解決できていないのですが、ご助言いただけないでしょうか。

import chromedriver_binary from selenium import webdriver url="https://www.ebay.com/sch/i.html?_from=R40&_nkw=Roland+MT-32&_sacat=0&_sop=16&_fcid=1&LH_Sold=1&LH_Complete=1&rt=nc&_udlo=10000" driver = webdriver.Chrome() driver.get(url) driver.find_element_by_class_name("s-item__link").click() if str(driver.current_url) == url: driver.find_element_by_class_name("s-item__link").click() ret = str(driver.find_element_by_class_name("u-flL w29 vi-price-np").text) driver.quit()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

やはり、"notranslate vi-VR-cvipPrice", "u-flL w29 vi-price-np" のいずれのclassも、ソース上にありませんでした。
以下のいずれかとすると、取得できました。

python

1print(driver.find_element_by_class_name("notranslate").text) 2 # notranslate xxx が他に2つあるため、最初のelementである場合のみ使えます 3 4print(driver.find_element_by_id("prcIsum_bidPrice").text) 5 # このidは、ソース上でユニーク(唯一)でした 6 7print(driver.find_element_by_xpath("//*[@id='prcIsum_bidPrice']").text)

 
出力結果 ...いずれも同じ結果になります。

Terminal

1AU $699.00 2AU $699.00 3AU $699.00

 
上述のいずれかで取得してみてください。

 

(参考): Chromeのデベロッパーツールでの確認結果
イメージ説明

 

 

【再追記】

以下のいずれかで、金額を取得することができますが、find_element_by_class_name="notranslate vi-VR-cvipPrice" ではエラーとなってしまいます。

python

1driver.find_element_by_class_name("s-item__link").click() 2if str(driver.current_url) == url: 3 driver.find_element_by_class_name("s-item__link").click() 4ret = driver.find_element_by_css_selector( 5 "div:nth-child(1) > table > tbody > tr:nth-child(6) > td > div > div:nth-child(2) > div.u-flL.w29.vi-price-np > span").text 6 7もしくは 8 9ret = driver.find_element_by_xpath('//*[@id = "mainContent"]/div[1]/table/tbody/tr[6]/td/div/div[2]/div[2]/span').text

投稿2021/01/21 07:49

編集2021/01/21 14:34
_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruei

2021/01/21 11:26

ありがとうございます><
_whitecat_22

2021/01/21 11:36

お役に立てて大変うれしく思います。 サイトによっては、定期的にclass名やid名が変わる(変えている)ようですので、今まで取得できてたのに~という場合は、chromeのデベロッパーツールや、ソース表示を活用してみてください。
ruei

2021/01/21 12:01

何度もすみません、検索結果から遷移したときに限ってこのような現象が起きることが分かりました(質問の更新部分参照)。こちらの場合はどうなるかご存じないでしょうか...?
_whitecat_22

2021/01/21 12:35

確認してみますので、少々お時間をください。
_whitecat_22

2021/01/21 13:45

driver.find_element_by_class_name("s-item__link").click() if str(driver.current_url) == url: driver.find_element_by_class_name("s-item__link").click() 上記2行のいずれかで、ページ遷移までは問題なく出来ています。 ret = str(driver.find_element_by_class_name("u-flL w29 vi-price-np").text) 遷移後のページで、↑この一文がエラーになります。 遷移後のページには、"u-flL w29 vi-price-np" も、"notranslate vi-VR-cvipPrice" も、いずれのclass指定も存在しています。 今時点で、エラーとなる原因が特定できていません。もう少しお待ちください。
guest

0

メソッド名が異なります。
~_class_nameです。
また、"notranslate vi-VR-cvipPrice"、"u-flL w29 vi-price-np" というクラス名は存在しませんでした。(2021/01/21 6:40(JST)時点)

該当しそうな箇所が2箇所ありましたので、それぞれ試してみました。
赤枠①、赤枠②と、それぞれ下記の指定で取得できます。

python

1 2# driver.find_element_by_class("notranslate vi-VR-cvipPrice").text 3 4text1 = driver.find_element_by_class_name("cc-text-spans--BOLD").text # 赤枠①の箇所 5print(text1) 6 7text2 = driver.find_element_by_class_name("original-price").text # 赤枠②の箇所 8print(text2)
AU $699.00 (approx JPY 55,940) # 赤枠①の箇所 AU $599.00 # 赤枠②の箇所

イメージ説明

投稿2021/01/20 21:49

_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_whitecat_22

2021/01/21 00:53

このリンクも、冒頭のリンクと、同じページに飛んでしまうのですが、リダイレクトされてしまうのかも知れません。 質問を再編集して、URLが分かるような画面キャプチャを貼ってもらますか? 加えて、念のためにURLも、再度記載してください。
ruei

2021/01/21 07:04

質問を編集して、再度URL訂正と画像の添付をしました。 元URLのview original itemの遷移先です。 申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問