質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

Python

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

selenium

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

Q&A

解決済

1回答

2664閲覧

selenium.webdriver.remote.webelement.WebElementの原因と解決策

jun1248

総合スコア1

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

Python

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

selenium

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

0グッド

0クリップ

投稿2021/06/29 10:55

###実現したいこと
Python及びseleniumで画面を操作しBeautifulSoupで解析した画面の値を取得したいと思っています。
対象は、BeautifulSoupで解析した下記のbタグで囲まれた「抽出対象文字」になります。

<html lang="en"> <body style=""> <div class="body"> <table border="0" cellpadding="0" cellspacing="0" width="1124"> <tbody> <tr> <td align="left" valign="top" width="48%"> </td> <td width="2%"> </td> <td align="right" valign="top" width="50%"> <span id="priceListAndBoard"> <span id="outlist"> <id="psform" method="post" name="psform" target=""> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tbody> <tr> </tr> <tr> </tr> <tr> <td bgcolor="#ffffff" rowspan="2" valign="top" width="260"> </td> <td rowspan="2"> </td> <td valign="top" width="300"> <table border="0" cellpadding="1" cellspacing="0" class="chart" width="100%"> <tbody> <tr> <td align="right" bgcolor="#ffffff" valign="middle" width="24%"> </td> <td align="right" bgcolor="#ffffff" valign="middle" width="48%"> <b> 抽出対象文字 </b> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </form> </span> </span> </td> </tr> </tbody> </table> </div> </body> </html>

発生している問題・エラーメッセージ

BeautifulSoupで解析しxpathで指定したオブジェクトを抽出したところ画面に表示されている値ではなく「selenium.webdriver.remote.webelement.WebElement (session="", element="")>」が表示されてしまいます。

該当のソースコード

#BeautifulSoupで解析する source2 = BeautifulSoup(driver.page_source, "html.parser").prettify() #xpathで対象の値を抽出する a = driver.find_element_by_xpath("/html/body/div[1]/table/tbody/tr/td[3]/span/span/form/table/tbody/tr[3]/td[3]/table/tbody/tr[1]/td[2]/b")

試したこと

print(table.get_attribute('b'))での取得を試みましたが、エラーになってしまいました。
解決方法のご教授をお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コメントに、

BeautifulSoupで解析する

と書いてありますが、実際には、driver.find_element_by_xpathを使っているので、BeautifulSoupじゃなくて、Seleniumの機能ですね。

返ってくる値は、Seleniumのエレメント(タグ)なので、テキストが欲しければ、a.textです。

投稿2021/06/29 13:18

otn

総合スコア84555

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

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

jun1248

2021/06/30 09:32

ご回答及びご指摘ありがとうございます。 ご教授頂きました通り下記で実行したところ「StaleElementReferenceException」になりました。 原因等を調査してみます。 print(a.text)
otn

2021/06/30 09:45

そのエラーは、a を取得してからページ遷移してしまったと言うことだと思います。 a=driver.find_element_by_xpath(~~) の直後で print(a.text) してないのでは? エレメントの参照の際は、今まさに表示されているページのエレメントしか参照できません。
jun1248

2021/06/30 10:18

ご回答いただきありがとうございます。 「StaleElementReferenceException」の件について自己解決できました。 driver.implicitly_wait()で待機時間を設け複数回テスト実施を行ったところ全て取得できました。 また、コメントについてもご指摘の通り修正いたします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問