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

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

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

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

Q&A

解決済

2回答

1770閲覧

Ruby 複数条件での配列の繰り返し処理について

Komama

総合スコア28

Ruby

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

0グッド

0クリップ

投稿2019/04/29 13:28

■分からないこと
あるサイトからseleniumで情報を取得しCSVを作成しようと考えています。
途中、"破産手開3"という文字列が入っている項目のみクリックしてページを開くという動作をしたいです。

■取り組んだこと
下記のように判定する文字列が入った配列と、クリックしたいボタンの配列を2つ作り、それをeacnで処理しようとしました。

・クリックするボタンのxpath
elements_text = driver.find_elements(:xpath, '//a[contains(text(), "テキスト")]')
・クリックしたい文字列が入ったxpath
elements_hasan3 = driver.find_elements(:xpath, '//td[contains(text(), "破産手開3")]')

■上手くいかないこと
eachを2回やってしまうと二重で処理をしてしまうので正しい数が得られません。
やり方をご教授いただきたくよろしくお願い致します。

Ruby

1elements_text = driver.find_elements(:xpath, '//a[contains(text(), "テキスト")]') 2elements_hasan3 = driver.find_elements(:xpath, '//td[contains(text(), "破産手開3")]') 3 4elements_hasan3.each do |hasan| 5 if hasan.text == "破産手開3" 6 elements_text.each do |e| 7 e.click; sleep 2 8 driver.find_element(:id, 'scrollUp').displayed? 9 window = driver.window_handles.last 10 driver.switch_to.window(window) 11 iframe = driver.find_element(:id, 'contentF') 12 driver.switch_to.frame(iframe) 13 filter_bankrupt(driver) 14 driver.close;sleep 2 15 driver.switch_to.window(base_window) 16 end 17 else 18 next 19 end 20end

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

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

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

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

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

guest

回答2

0

ベストアンサー

elements_textelements_hasan3の関連性がわかりませんが

仮に

html

1<td> 2 破産手開3 3 <a href="/">テキスト</a> 4</td>

だったならば、

ruby

1elements = driver.find_elements(:xpath, '//td[contains(text(), "破産手開3")]/a[contains(text(), "テキスト")]') 2elements.each do |e| 3 e.click; sleep 2 4 driver.find_element(:id, 'scrollUp').displayed? 5 window = driver.window_handles.last 6 driver.switch_to.window(window) 7 iframe = driver.find_element(:id, 'contentF') 8 driver.switch_to.frame(iframe) 9 filter_bankrupt(driver) 10 driver.close;sleep 2 11 driver.switch_to.window(base_window) 12end

で、おそらくいける

投稿2019/04/30 02:20

asm

総合スコア15147

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

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

Komama

2019/04/30 08:01

ありがとうございます。 こうやって複数条件を指定するのですね。 勉強になりました。
guest

0

1.普通に、結果が一意になるようにする。(何番目の要素か指定する・uniqをかける)

or

2.大域脱出を行う。

ruby

1catch :label1 do 2 1.upto(10) do |i| 3 1.upto(10) do |j| 4 if j == 5 5 throw :label1 6 end 7 puts "#{i} * #{j} = #{i * j}" 8 end 9 end 10end 11puts 'End'

投稿2019/04/30 01:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Komama

2019/04/30 08:02

やったことないやり方なので勉強しながらやってみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問