
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が無ければもう一度読み直すような形でやってみたのですが全く意味をなしていないようです。
何卒どうかご教授、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>google.rb:35:in `rescue in try': undefined method `縲if' for main:Object (NoMet
hodError)
私の回答をコピペして空白が全角のままではありませんか?
全角空白と半角空白の区別が付くエディタを使いましょう。
terapadを使っているにもかかわらず全角空白表示をオフにしていました。
早速全角を半角に置換して実行した所上手く成功しました。
最後までご指導いただき、本当にありがとうございました。
No.2
- 回答日時:
>どのように組めばいいかも分かっていない状態です。
何がわからないのかわからないです。
>例外、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>'
No.1
- 回答日時:
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で回避しようと試みましたが上手くいきませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(再質問)エクセルのマクロボ...
-
秀丸エディタで、同じ記号で囲...
-
CSSのhtmlへの紐付けについ...
-
Ruby 格納
-
Ruby newメソッド
-
1、Rstudioで回帰直線を求める...
-
a=2, b=1のとき”x=(a-b+3)%3”の...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
VBA/GetTickCountの49.7日の境...
-
Ruby Selenium 要素の待機
-
例外の再スロー時に、その原因...
-
プログラミング言語 R
-
SMLのエラーについて
-
.size .atとは?(挿入ソート)
-
rubyについて質問です
-
Rubyでクラスファイルをディレ...
-
【ruby】【文法?】ブロックをb...
-
計算の途中経過を表示
-
ブロック2 Ruby認定試験対策問題
-
ヒープの質問です(難易度高)
-
ブロックローカル変数
-
【ruby】 『クラスの生成に失...
-
What class are you in? には何...
-
教えてください。vb5.0
-
class roomとclassroom どちら...
-
pythonのerrorコード
-
HSTLやSSTL等のI/Oピン
おすすめ情報