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

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

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

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

Q&A

解決済

1回答

492閲覧

Ruby 複数ページ遷移のためにベージ要素を取得したい

TUTINO

総合スコア5

Ruby

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

0グッド

0クリップ

投稿2021/08/15 15:26

rubyのscanで複数ページ遷移のためにページ要素を取得しようとし、
WEBでコードを探して作成してみましたが、
a href〜 ”Next” のすぐ後に</a> が無いため、書き方がわかりません。
お手数かけますが、アドバイスをお願いいたします。

WEBのページ部分のコード

<li class="a-last"><a href="/s?k=air+max+95&amp;page=2&amp;qid=1629028835&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li></ul></div>

私のコード

next_url = page_source.scan(%r|<a href="(.+?)">Next</a>|).flatten!

エラー
undefined local variable or method `page_source' for main:Object (NameError)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ruby

1next_url = page_source.scan(%r|<a href="(.+?)">Next<|).flatten

でいいのでは?

あと、flatten!flattenの間違いですね。

#追記
正規表現での抽出なので、Seleniumを使っているとは思わなかったですが、Seleniumを使うなら普通はこうでしょうか。

Ruby

1driver.first(xpath: "//a[starts-with(text(),'Next')]")["href"]

投稿2021/08/15 15:48

編集2021/08/16 11:41
otn

総合スコア84804

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

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

TUTINO

2021/08/15 21:35

夜遅くにご回答頂き、ありがとうございます。 書き換えてみましたが、下記エラーとなってしまいました。 seleniumだと使えないメソッドとかでしょうか。よく分からず申し訳ありません。 [10568:1616:0816/062705.132:ERROR:broker_win.cc(56)] Error reading broker pipe: パイプは終了しました。 (0x6D) [10568:1616:0816/062705.133:ERROR:broker_win.cc(141)] Error sending sync broker message: パイプを閉じています。 (0xE8) [10568:1616:0816/062705.139:ERROR:broker_win.cc(141)] Error sending sync broker message: パイプを閉じています。 (0xE8) sele4.rb:18:in `<main>': undefined local variable or method `page_source' for main:Object (NameError)
otn

2021/08/15 22:56 編集

Seleniumを使っているのに何故また正規表現で抜き出そうとしている? Seleniumを使っているのなら、正規表現など使わずに普通にSeleniumの機能で要素を取得するのが楽です。 もちろん、正規表現を使っても可能ですが。 エラーの直接の原因は、page_source という変数が未定義なことです。定義してないのでは?あるいはSeleniumのメソッドを使うのに driver.page_source と書かずに単に、page_source と書いている?
TUTINO

2021/08/15 22:58

すみません。夕方に確認いたします。
TUTINO

2021/08/16 11:24

確認が遅くないまして申し訳ございません。 只今、driver.page_source と書く事で、ページ要素を取得できました。 お忙しい中、丁寧にご指導頂き、本当にありがとうございました。 今回もとても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問