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

时间:2015-05-25 19:05:38

标签: watir watir-webdriver

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

尽管如此,当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,标题,文本查找。他们都没有工作,因为Nokogiri在输出中显示,那部分代码不存在。

  2. 延长超时并挽救错误,让浏览器有更多时间确保代码存在。

  3. 此处的代码:     开始

    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存在由js加载的内容中存在的div> browser.wait_until{browser.div(:id => 'main_layout_v2_1_cell_1:0').exist?}>超时错误。
    2. 注意:我正在尝试获取的内容包含在具有此结构<body scroll="auto" bgcolor="F4F6F7" onload="main.onload();">

      的正文标记中

      Nokogiri解析的代码仅输出未由js加载的内容。如何加载该内容?

1 个答案:

答案 0 :(得分:2)

html方法仅包含框架和iframe的内容。因此,如果所需内容位于框架内,则需要明确告知Watir返回框架HTML。

假设页面上只有1个iframe,您可以这样做:

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