電子書籍の厳選無料作品が豊富!

Rubyの初心者でSeleniumを使ってスクレイピングを趣味としてしているものです。
ブラウザはchromeです。

スクレイピングをしたいページで404が数回続き、やっと読み込めるサイトがあるので、404エラーで止まってしまうのである要素が無ければもう一度やり直す、そのようになったら初めからやり直してみる形にしたいと思って色々と調べ試行錯誤をしています。


https://www.qoosky.net/references/58/
を参考に


require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定

driver.navigate.to "http://google.com"

wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
begin
element = wait.until { driver.find_element(:id => "hoge") }
ensure
driver.quit
driver.navigate.to "http://google.com"

end

id、hogeが無ければもう一度読み直すような形でやってみたのですが全く意味をなしていないようです。

何卒どうかご教授、よろしくお願いします。

A 回答 (3件)

>google.rb:35:in `rescue in try': undefined method `縲€if' for main:Object (NoMet


hodError)

私の回答をコピペして空白が全角のままではありませんか?
全角空白と半角空白の区別が付くエディタを使いましょう。
    • good
    • 0
この回答へのお礼

terapadを使っているにもかかわらず全角空白表示をオフにしていました。
早速全角を半角に置換して実行した所上手く成功しました。
最後までご指導いただき、本当にありがとうございました。

お礼日時:2014/08/25 11:17

>どのように組めばいいかも分かっていない状態です。



何がわからないのかわからないです。

>例外、404に行くとSelenium::WebDriver::Error::NoSuchElementErrorでコード自体が落ちてしまいます。

ですから、その落ちる部分を私の書いた、「例外が起こるかもしれないことをする」に書けば良いのですが。
    • good
    • 0
この回答へのお礼

ありごとうございます。
ご伝授通りもう一度試してみました。


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>'

お礼日時:2014/08/24 21:26

Seleniumは使ったことないですが、例外が上がったときに一定回数リトライするために私が使っている方法です。

これがベストでは無いと思いますが。

def try(n=10)
 例外が起こるかもしれないことをする
rescue => e
 if n==0
  raise e
 else
  try(n-1)
 end
end

try
    • good
    • 0
この回答へのお礼

ありがとうがとうございます。
一応試してみたのですが上手くいきませんでした。
どのように組めばいいかも分かっていない状態です。

例外、404に行くとSelenium::WebDriver::Error::NoSuchElementErrorでコード自体が落ちてしまいます。

seleniumIDEでは

rescue Selenium::WebDriver::Error::NoSuchElementError
false
end

の出力でこのような感じで載っているので何か分かればと思っています。

また、ifで回避しようと試みましたが上手くいきませんでした。

お礼日時:2014/08/24 10:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!