【问题标题】:Access browser's public `window` attributes using ruby使用 ruby​​ 访问浏览器的公共“窗口”属性
【发布时间】:2020-02-08 11:47:18
【问题描述】:

是否可以使用 Nokogiri、Mechanize 或任何其他 gem 来访问可通过浏览器控制台访问的 window 属性?

【问题讨论】:

  • 你到底想做什么?
  • 我正在尝试构建一个抓取工具,但我发现我尝试抓取的网站有一个变量 window.productJSON 可用于我需要的所有数据。与其在 nokogiri 中使用 css 选择器,我想知道是否有一种方法可以直接从 window.productJSON 获取数据
  • Nokogiri 只是一个 xml/html 解析器。 Window 是浏览器 JavaScript api 的一部分。没有浏览器 - 没有窗口。所以你真正需要的是一个像 phantomjs 或 selenium 这样的自动化浏览器。
  • 使用无头浏览器或使用正则表达式匹配 json 数据,如果你能找到一个模式。然后保存或解析它
  • 不,你应该研究一下 Selenium

标签: ruby-on-rails ruby nokogiri mechanize watir


【解决方案1】:

我认为你需要的是Watir gem,它实际上是由 Selenium 驱动的,并且像魔法一样工作。

它基本上可以让你做这样的事情:

require 'watir'

browser = Watir::Browser.new

browser.goto("site-u-want-to-scrape.com")

browser.window

试试看这个tutorial 有一个更好的理解。

【讨论】:

  • Watir 工作!为了让它将哈希输出到终端,我必须运行 browser.execute_script "return window.productJSON" 并正常工作。现在需要弄清楚如何在无头环境中运行它! :p 谢谢!
  • 对于将来偶然发现这个问题的任何人,您可以这样做以使 Chrome 处于无头模式:browser = Watir::Browser.new(:chrome, {:chromeOptions => {:args => ['--headless', '--window-size=1200x600']}})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多