【问题标题】:Ruby Watir from html instead of URL来自 html 而不是 URL 的 Ruby Watir
【发布时间】:2016-05-16 01:11:42
【问题描述】:

在我的场景中,我正在抓取一个内容由 javascript 生成的网站。我知道 watir 非常适合我的情况,但众所周知,它往往会增加一点开销并使程序花费更长的时间。

目前我可以使用 Nokogiri 登录并使用用户名/密码发送帖子请求,您可以想象这真的很快。登录成功后,我会转到我要抓取的内容所在的地址,正如我之前所说,这些内容是一些javascript处理的结果,所以从这一点来看Nokogiri是不好的。

我想要做的是使用 Watir 加载 Nokogiri 已经返回的 html,以便解析所有 javascript,然后继续抓取生成的 HTML,而不必从一开始就使用 Watir 以减少处理时间。

有没有办法将内容从 html 字符串加载到 Watir 中,以便对其进行处理而不是调用 'goto' 方法?

【问题讨论】:

  • 请阅读“How to Ask”,尤其是底部的链接。你的研究发现了什么?如果您什么也没找到,请告诉我们您在哪里搜索并解释为什么这些没有帮助。否则,你有什么尝试?因为您的问题太宽泛了,您要求我们从零开始并编写教程,因为我们不知道您尝试过或未尝试过什么。
  • Nokogiri 不发送帖子请求,您是在谈论机械化吗?由于 XXS 问题,您的方法可能行不通。也许您应该考虑将机械化 cookie 加载到 watir 中。
  • @the Tin Man 也许如果你把时间花在阅读问题而不是批评上,你会注意到这个问题根本不宽泛:“有没有办法将内容从 HTML 加载到 watir而是字符串,所以它被处理而不是调用 goto 方法?”。由于根据问题还有其他回复,看来问题很清楚
  • @pguardiario 你是对的,没想到 XSS 问题...
  • 给出的答案是广泛而笼统的,而不是具体和详细的​​。那是因为没有提供足够的必要信息。我不是来批评的,我是来帮助你得到答案的,因为我知道需要什么信息,而且因为 SO 是关于帮助他人的详细答案,而不仅仅是你,我们需要帮助他人解决问题的信息问题也是。而你的问题并没有做到这一点。而且,由于有多次反对票,其他人也有同样的感觉。

标签: ruby nokogiri watir watir-webdriver scrape


【解决方案1】:

您可以随时尝试。

require 'open-uri'
require 'nokogiri'
require 'watir'
#previous stuff
`touch temp.html`
File.open("temp.html", "w") {|f| f.write(nokodoc.html)}
b = Watir::Browser.new
b.goto("file://#{Dir.pwd}/temp.html")

【讨论】:

  • 谢谢,但这是从字符串中读取的目的:不必保存和读取文件
【解决方案2】:

您的问题的直接答案是否定的。 Watir 不是用来抓取网页的,而是用来测试网页的。测试网页意味着导航到它们并与之交互。

此外,如果您的 html 解析器无法解决您的问题,那么将该解析器中的文本复制到 Watir 也无法解决您的问题。

【讨论】:

  • 谢谢。如果我从 Watir 打印 HTML 输出,就会出现 JavaScript 生成的代码,所以如果我解析 Watir 的输出,我的问题就解决了
  • 是的,但是你仍然需要一个带有 javascript 引擎的东西来*渲染文本,这意味着一个浏览器,这意味着一个网站,无论是本地的还是远程的,就像 boulder_ruby 建议的那样。
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2012-01-11
  • 2019-05-21
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多