Watir & Nokogiri 没有在框架中加载内容

Watir & Nokogiri not loading content in frame

使用 watir 和 nokogiri 解析我可以在我的银行帐户中找到的内容。 browser.div(:id => 'main_layout_v2_1_cell_1:0').wait_until_present 行告诉 watir 等到 js 加载的 div 出现。 (我在 Chrome 中禁用了 javascript 以检查内容是否由 javascript 加载,确实如此。)

None但是当Nokogiri输入browser.html时,它会显示除js加载的部分之外的所有内容。

require 'rubygems'
require 'watir'
require 'watir-webdriver'
require "watir-webdriver/wait"
require 'nokogiri'

browser = Watir::Browser.new
browser.goto 'https://particulares.gruposantander.es/SUPFPA_ENS/BtoChannelDriver.ssobto?dse_operationName=NavLoginSupernet&dse_parentContextName=&dse_processorState=initial&dse_nextEventName=start'

#Login
browser.select_list(:name => 'tipoDocumento').select 'NIF'
browser.text_field(:name => 'numeroDocumento').set 'xxx'
browser.text_field(:name => 'password').set 'xxx'
browser.button(:value => 'Entrar').click

#Select account
browser.link(:title => 'Cuentas').when_present.click
browser.div(:id => 'main_layout_v2_1_cell_1:0').wait_until_present

#Parse what you see, Noko
page = Nokogiri::HTML.parse(browser.html)
puts page

我尝试过的事情:

  1. 如果我通过 Nokogiri 解析整个 HTML 是因为我首先尝试获取那些我想通过 ID、标题、文本查找的链接。 None 其中有效,因为正如 Nokogiri 在输出中显示的那样,那部分代码不存在。

  2. 延长超时时间并修复错误,让浏览器有更多时间确认代码是否存在。

代码在这里: 开始

Timeout::timeout(40) do
    #Parse what you see, Noko
    page = Nokogiri::HTML.parse(browser.html)
    puts page
  end
    puts 'done'
rescue Timeout::Error => e
  puts 'not done :/'
end
  1. Wait_until a div present in the content by js loaded is present > browser.wait_until{browser.div(:id => 'main_layout_v2_1_cell_1:0').exist?} > 超时错误。

注意:我要获取的内容包含在具有此结构的 body 标签中 <body scroll="auto" bgcolor="F4F6F7" onload="main.onload();">

Nokogiri解析的代码只输出js没有加载的内容。如何加载该内容?

html方法只是不包含frame和iframe的内容。因此,如果所需内容在一个框架内,您需要明确告诉 Watir return 框架 HTML.

假设页面上只有 1 个 iframe,你会这样做:

page = Nokogiri::HTML.parse(browser.iframe.html)