为什么mechanize会在我的page2.links.each方法链上引发NoMethodError?

时间:2016-09-10 22:38:26

标签: ruby loops hyperlink mechanize nomethoderror

错误

mySpiderScript.rb:119:in ` block (3 levels) in <main>': undefined method `links' for #<Mechanize::Image:0x120a7e38> (NoMethodError)   

代码

agent2 = Mechanize.new
page2 = agent2.get('http://www.mywebsite.net')
  page2.links.each do |link2|     #line 119
    name = link2.href.to_s   

如何修复此问题以使脚本继续运行?

更新

这是page2.body返回的内容。

����JFIF���ICC_PROFILE�lcms0mntrRGB XYZ �*acspAPPL���-lcms
                                                                                   desc8cprt@Nwtpt�chad�,rXYZ�bXYZ�gXYZ�rTRC
                                                                                                                                        gTRC, bTRCL chrml$mluc
                                                                                                                                                                  enUSsRGB built-inmluc
                                                                                                                                                                                          enUS2No copyright, use freelyXYZ ���-sf32
Y�                     J����*��������������XYZ o�8��XYZ $����XYZ b����paraff��
Y�raff��
Y�raff��
[chrm��T{L���&f\��





 $.' ",#(7),01444'9=82<.342��C          


2!!22222222222222222222222222222222222222222222222222��"����������
                                                                                         ?����

1 个答案:

答案 0 :(得分:1)

来自comments

  

[T]他的身体不是有效的机械化物体。如何跳过它?

在尝试调用对象之前,有很多方法可以验证对象。一种方法是使用Ruby 2.3.0中引入的记录不良的safe navigation operator&.)。例如,使用现有代码:

page2&.links&.each do |link2|

如果 page2 中的对象没有响应#links,或者page2.links的结果没有响应#each,则返回nil。然后,程序流将在page2&.links&.each方法链形成的#each块之后继续。