- ベストアンサー
Ruby Selenium要素の待機
- Rubyの初心者がSeleniumを使って要素の待機を行いたい
- スクレイピングを行う際に404エラーが発生し、要素が見つからない場合には再試行したい
- 参考になるサイトを見ながら試行錯誤をしているが、うまくいっていない
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>google.rb:35:in `rescue in try': undefined method `縲if' for main:Object (NoMet hodError) 私の回答をコピペして空白が全角のままではありませんか? 全角空白と半角空白の区別が付くエディタを使いましょう。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
>どのように組めばいいかも分かっていない状態です。 何がわからないのかわからないです。 >例外、404に行くとSelenium::WebDriver::Error::NoSuchElementErrorでコード自体が落ちてしまいます。 ですから、その落ちる部分を私の書いた、「例外が起こるかもしれないことをする」に書けば良いのですが。
お礼
ありごとうございます。 ご伝授通りもう一度試してみました。 require 'selenium-webdriver' def try(n=10) # 例外が起こるかもしれないことをする driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定 driver.navigate.to "https://www.google.co.jp/" #URL移動 driver.find_element(:xpath, '//*[@id="hoge"]').click sleep 2 driver.quit #ブラウザ終了 rescue => e if n==0 raise e else try(n-1) end end try 上記を試しに実行しました。 hogeは存在しないので絶対に落ちます。 エラーがこのように出ました。 google.rb:35:in `rescue in try': undefined method `縲if' for main:Object (NoMet hodError) from google.rb:5:in `try' from google.rb:42:in `<main>'
- notnot
- ベストアンサー率47% (4900/10358)
Seleniumは使ったことないですが、例外が上がったときに一定回数リトライするために私が使っている方法です。これがベストでは無いと思いますが。 def try(n=10) 例外が起こるかもしれないことをする rescue => e if n==0 raise e else try(n-1) end end try
お礼
ありがとうがとうございます。 一応試してみたのですが上手くいきませんでした。 どのように組めばいいかも分かっていない状態です。 例外、404に行くとSelenium::WebDriver::Error::NoSuchElementErrorでコード自体が落ちてしまいます。 seleniumIDEでは rescue Selenium::WebDriver::Error::NoSuchElementError false end の出力でこのような感じで載っているので何か分かればと思っています。 また、ifで回避しようと試みましたが上手くいきませんでした。
お礼
terapadを使っているにもかかわらず全角空白表示をオフにしていました。 早速全角を半角に置換して実行した所上手く成功しました。 最後までご指導いただき、本当にありがとうございました。