
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ランキング
-
(再質問)エクセルのマクロボ...
-
パソコンのスクリーンセーバー...
-
ruby 配列
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ルビー言語 ライブラリー 追記
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
実行時エラー450:引数の数が一...
-
ruby loopメソッド 変数(再喝)
-
教えてください
-
文字コードのエラー
-
ruby while式
-
ruby loopメソッド 変数
-
ruby raise句
-
ruby begin句
-
pandasでsqlite3にテーブル作成...
-
100万件越えCSVから条件を満た...
-
プログラミング
-
7セグメント LED ディスプレイ ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「arg」は何の略?
-
Ruby Selenium 要素の待機
-
プログラミング言語 R
-
例外の再スロー時に、その原因...
-
ruby メソッドのリターン
-
VBA/GetTickCountの49.7日の境...
-
Ruby 演算子 "==="
-
cos波表示について マクローリ...
-
【ruby】クラスCGIを改造したい
-
メソッド定義の構文のdefって
-
教えてください。vb5.0
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
クラス名やモジュール名の競合...
-
実行時エラー450:引数の数が一...
-
エラー「メソッドまたはデータ...
-
テンプレートの特殊化でコンパ...
-
class roomとclassroom どちら...
-
正規表現で両端に文字列を置換
-
Rails コンボボックスの値の保...
おすすめ情報