首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的方法“单击”为nil:NilClass (机械化)

未定义的方法“单击”为nil:NilClass (机械化)
EN

Stack Overflow用户
提问于 2015-09-25 16:02:12
回答 2查看 3K关注 0票数 0

我正在构建一个脚本使用机械刮数据从一个网站。脚本应该点击“阅读传记”链接,然后在下一页上刮除成员的传记。

下面是Rake文件中的脚本:

代码语言:javascript
复制
require 'mechanize'
require 'date'
require 'json'


task :testing2 do

    agent = Mechanize.new
    page = agent.get("https://www.congress.gov/members")

    page_links = page.links_with(href: %r{.*/member/\w+})


    member_links = page_links[0...2]

    members = member_links.map do |link|

      member = link.click

      name = member.search('title').text.split('|')[0]
      institution = member.search('td~ td+ td').text.split(':')[0]
      dob = member.search('.birthdate').text.strip[1..4]

      # Get bio
      bio_link = member.link_with(:text => 'Read biography').click
      bio = bio_page.search('p').text.strip

      {
        name: name.strip,
        institution: institution.strip,
        dob: dob,
        bio: bio

      }

    end

    puts JSON.pretty_generate(members)

end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-25 16:19:21

您正在使用的代码:

代码语言:javascript
复制
member.link_with(text: 'Read biography')

找不到链接,因为链接中有一些空格和新行字符。你需要像这样使用它:

代码语言:javascript
复制
member.link_with(text: /Read biography/)

代码会找到链接。

票数 0
EN

Stack Overflow用户

发布于 2015-09-25 16:09:57

有两个调用可单击:

代码语言:javascript
复制
member = link.click

代码语言:javascript
复制
bio_link = member.link_with(:text => 'Read biography').click

第一个是在迭代器上调用的,它不能是nil,因此有问题的是第二个。

尝试将调试输出放在# Get bio之前,或者设置一个断点,并检查它有什么问题。不可能知道为什么member.link_with(:text => 'Read biography')会根据您提供的信息返回nil

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32786256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档