【问题标题】:how do I dump an html page as XML with watir & JavaScript?如何使用 watir & JavaScript 将 html 页面转储为 XML?
【发布时间】:2011-07-30 00:20:00
【问题描述】:

我一直在尝试在 FireWatir 中创建一个简单的脚本,它将整个当前文档 DOM(包括 javascript 生成的代码)转换为 XML 表示。

根据网络上的线索,我想出了这个脚本

require 'rubygems'
require 'firewatir'


browser = Watir::Browser.new
browser.goto('http://www.google.com/')
browser.text_field(:id, 'lst-ib').set('hello')
browser.button(:name, 'btnG').click
puts browser.execute_script("new XMLSerializer().serializeToString(document)")

但是,在 Firefox 3.6 中运行它会导致这个错误:

c:/Ruby192/lib/ruby/gems/1.9.1/gems/firewatir-1.9.2/lib/firewatir/jssh_socket.rb :19:in js_eval': XMLSerializer is not defined (JsshSocket::JSReferenceError) from c:/Ruby192/lib/ruby/gems/1.9.1/gems/firewatir-1.9.2/lib/firewatir/firefox.rb:136:inexecute_script' 来自 test.rb:9:in `'

如果我输入这一行:

javascript:window.open('aout:blank').document.write('<pre>' + unescape((new     XMLSerializer()).serializeToString(document).replace(/</g, '&lt;')) + '</pre>')

进入 FF 位置框,我得到一个带有所需 XML 的页面。所以 XMLSerializer 必须在某个地方定义,我的 JS 代码似乎遥不可及。

我怎样才能让它工作?

【问题讨论】:

    标签: javascript firefox watir firewatir


    【解决方案1】:

    不确定您所说的“位置框”是什么意思,但如果那是地址栏(在此页面上显示 http://stackoverflow.com/... 的那个),那么试试这个:

    browser.goto "javascript:window.open('aout:blank').document.write('<pre>' + unescape((new     XMLSerializer()).serializeToString(document).replace(/</g, '&lt;')) + '</pre>')"
    

    【讨论】:

    • yap 确实指的是地址栏,我确实尝试过这种方法,但这会导致 Firefox 中的加载选项卡永无止境,直到 watir 放弃并引发超时异常。我不明白为什么我不能从代码中访问 XMLSerilizer 对象,显然 FF 知道!
    【解决方案2】:

    作为它的核心,我怀疑这可能与运行 javascript 的“沙盒”边界有关。浏览器本身可能知道序列化程序,但不选择给 javascript 任何访问权限给它。

    但是,给猫剥皮的方法可能不止一种。如果您的第二段代码为您提供了一个以 XML 语法呈现为文本的页面,为什么不先这样做,然后通过

    使用生成的页面
    puts browser.text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2011-08-24
      • 2016-09-09
      • 2014-07-09
      相关资源
      最近更新 更多