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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

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

selenium

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

Q&A

解決済

1回答

1042閲覧

Ruby selenium Nextページのリンクを取得したい

TUTINO

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

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

selenium

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

0グッド

0クリップ

投稿2021/08/17 16:36

ruby seleniumu でNextページのリンクを取得しようとして
グーグルの検証→右クリック→XpathCopy でコードに貼り付けてみましたが、
エラーが出てしまいます。
お手数かけますが、アドバイスをお願いいたします。

url

https://www.amazon.com/s?k=air+max+95&ref=nb_sb_noss_2

Nextページ部分のコード  上から順に Previous、1ページ、2ページ、3ページ、Next です。

<div class="a-section a-spacing-none a-padding-base"> <div class="a-text-center" role="navigation"><ul class="a-pagination"><li class="a-disabled">←<span class="a-letter-space"></span><span class="a-letter-space"></span>Previous</li> <li class="a-selected"><a href="/s?k=air+max+95&amp;qid=1629206859&amp;ref=sr_pg_1" aria-current="page">1</a></li> <li class="a-normal"><a href="/s?k=air+max+95&amp;page=2&amp;qid=1629206859&amp;ref=sr_pg_2">2</a></li> <li class="a-normal"><a href="/s?k=air+max+95&amp;page=3&amp;qid=1629206859&amp;ref=sr_pg_3">3</a></li> <li class="a-last"><a href="/s?k=air+max+95&amp;page=2&amp;qid=1629206859&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li></ul></div> </div> </span> </div>

私のコード

next_url = driver.find_element(:xpath,'/html/body/table/tbody/tr[6155]/td[2]/text()')

エラー
Backtrace:: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/table/tbody/tr[6155]/td[2]/text()"} (Selenium::WebDriver::Error::NoSuchElementError)

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

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

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

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

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

guest

回答1

0

ベストアンサー

そういう要素が無いというエラーなので、XPathが実際のHTMLと合ってません。
そういう「何番目の何」という指定は、HTMLが少し変わっただけで破綻するので、やめた方が良いです。

テキスト部分が"Next"であるという条件のXPathにすればいいかと思います。

投稿2021/08/17 17:19

otn

総合スコア84555

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

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

TUTINO

2021/08/17 22:36

遅い時間にご回答ありがとうございます。XPathをコピーするのが確実かと思っていましたが、そうでもないと言うことですね。かなり苦戦しましたが、おかげ様でスッキリしました。Nextを条件にして再度調べてみます。
TUTINO

2021/08/18 16:01

調べた結果、下記コードを作成しましたが、エラーで取得できませんでした。 next_url = driver.find_element(:xpath,'//a/@href[contains(text(),"Next")]') エラー Backtrace:: no such element: Unable to locate element: {"method":"xpath","selector":"//a/@href[contains(text(),"Next")]"} (Selenium::WebDriver::Error::NoSuchElementError) 申し訳ございませんが、どのようなXPath にすれば良いか教えて欲しいです。
otn

2021/08/18 21:46

'//a[contains(text(),"Next")]' ですね。
TUTINO

2021/08/18 22:28

今回も最後までご指導頂き、ありがとうございました。 無事に取得でき、クリックして次ぎのページに移れました。本当に助かりました。 ただ、要素をputsすると、#<Selenium::WebDriver::Element:0x0000000006972f88> と元のページソースと違うコードになっています。これはどういう事でしょうか。
otn

2021/08/19 10:40

「要素をputsする」というのは、「ページソースを表示する」というのは違います。 outerHTMLが欲しいと言うことなら、そういうメソッドは無いですね。
TUTINO

2021/08/20 03:31

回答ありがとうございます。勉強不足ですので、もっと頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問