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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- その他(プログラミング・Web制作) パイソン。スクレイピング。Chromeドライバーの使い方を教えてください。 1 2023/06/14 21:55
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- Visual Basic(VBA) excel vbaでselenium basic 3 2022/10/02 12:35
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- 英語 be sorry for doingとbe sorry to have doneの意味の違いについて 2 2023/06/09 13:57
- その他(コンピューター・テクノロジー) WO mic のUSB接続でエラーが出ます。 1 2022/07/09 09:58
- その他(プログラミング・Web制作) selenium python3 pycharm 1 2022/06/16 15:35
- Visual Basic(VBA) <excel vba>selenium basicのWebDriverの自動更新のエラーについて 1 2022/10/01 17:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あせんうぶり言語
-
100万件越えCSVから条件を満た...
-
電子書籍epub変換について
-
パイソンエラーについて
-
MacBookAir起動時にRubyソース...
-
ビーリアルのユーザー名を変え...
-
7セグメント LED ディスプレイ ...
-
VBA メモ帳の上書き保存がしたい
-
前回の質問の続き
-
教えてください
-
ウェブサイトを別の会社のホス...
-
VBAのvlookupでエラーになって...
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
-
こういう問題分をよんだとき
-
バーチャルボックスが使えなく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
例外の再スロー時に、その原因...
-
fortranを用いた行列の掛け算に...
-
pythonのプログラミング
-
英語訳をおねがいします
-
【ruby】クラスCGIを改造したい
-
【ruby】無名関数?でブロック...
-
rubyについて質問です
-
.size .atとは?(挿入ソート)
-
Rubyでクラスファイルをディレ...
-
ブロックローカル変数
-
計算の途中経過を表示
-
VBA/GetTickCountの49.7日の境...
-
Ruby Selenium 要素の待機
-
cos波表示について マクローリ...
-
Ruby Selenium リンクの取得方法
-
Ruby インスタンス変数@fooを...
-
【Ruby】基本的な質問 数字を...
-
SMLのエラーについて
-
Ruby evalで代入
おすすめ情報