回答編集履歴

1 私の環境ではWWW::Mechanize::ResponseCodeErrorをMechanize::ResponseCodeErrorにしたところ動作しました。

black-bass

black-bass score 6

2017/07/09 17:23  投稿

他の方が指摘されているようにbegin内の
html = open(agent.get(url)) do |f|
に対してendが無いように見受けられます。
私も初心者で
やりたいことに合致するかわかりませんが、
下記のようにしてみてはいかがでしょうか?
```ruby
     begin
       page = agent.get(url)
     rescue Timeout::Error
       puts "caught Timeout::Error!"
       retry # タイムアウト用
     rescue WWW::Mechanize::ResponseCodeError => e
     rescue Mechanize::ResponseCodeError => e
       case e.response_code
         when "404"
           puts "caught Net::HTTPNotFound!"
         when "502"
           puts "caught Net::HTTPBadGateway!"
           retry # 502用
         else
           puts "caught Excepcion!" + e.response_code
           retry
       end
     end
```
お役に立てれば幸いです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る