点击机械化的xpath链接



我想点击我用xpath(nokogiri)选择的机械化链接。

这怎么可能?

    next_page = page.search "//div[@class='grid-dataset-pager']/span[@class='currentPage']/following-sibling::a[starts-with(@class, 'page')][1]"
    next_page.click

问题是nokogiri元素没有点击功能。

我无法读取href(URL)并发送get请求,因为链接定义了onclick函数(没有href属性)。

如果这不可能,有什么替代方案?

  1. 当您试图只查找一个元素时,请使用page.at而不是page.search

  2. 您可以使用CSS选择器语法使选择器更简单(更短):

    next_page = page.at('div.grid-dataset-pager > span.currentPage + a[class^="page"]')
    
  3. 如果您有Nokogiri元素、页面和mechanize对象来向构造函数提供信息,那么您可以构造自己的Link实例:

    next_link = Mechanize::Page::Link.new( next_page, mech, page )
    next_link.click
    
  4. 但是,您可能不需要,因为Mechanize#click允许您提供一个字符串,其中包含要单击的锚点/按钮的文本。

    # Assuming this link text is unique on the page, which I suspect it is
    mech.click next_page.text
    
  5. 完全重读问题后编辑:然而,这些都不会对你有帮助,因为机械化不是一个网络浏览器它没有JavaScript引擎,因此不会(不能)为您执行onclick。为此,您需要使用Ruby来控制真正的web浏览器,例如使用Watir、Selenium或Celerity等。

通常情况下,您会执行以下操作:

page.link_with(:node => next_link).click

然而,正如Phrogz所说,这并不能真正做到你想要的。

为什么不使用hpricot元素?只要链接具有"src"或"href"属性,机械化就可以单击hpricot元素。尝试以下方法:

page = agent.get("http://www.example.com")
next_page = agent.click((page/"//your/xpath/a"))

编辑在阅读Phrogz答案后,我也意识到这并不能真正做到这一点。机械化还不支持Javascript。考虑到这一点,您有三种选择。

  1. 使用控制真实web浏览器的库。参见@Phrogz答案
  2. 使用Capybara,它是一个集成测试库,但也可以用作独立的爬网程序。我已经用HTMLUnit成功地做到了这一点,HTMLUnit也是一个Java集成测试库。Capybara默认支持Selenium,但它也通过外部gem支持Webkit。Capybara开箱即用地解释Javascript。这篇博文可能会有所帮助
  3. Grok你打算抓取的页面,并使用HTTPFox之类的东西来监控onclick Javascript函数的作用,并在你的机械化脚本中复制它

祝你好运。

相关内容

  • 没有找到相关文章

最新更新