使用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
我尝试过的事情:
如果我通过Nokogiri解析整个HTML是因为我首先尝试获取这些链接,我想点击ID,标题,文本查找。他们都没有工作,因为Nokogiri在输出中显示,那部分代码不存在。
延长超时并挽救错误,让浏览器有更多时间确保代码存在。
此处的代码: 开始
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
browser.wait_until{browser.div(:id => 'main_layout_v2_1_cell_1:0').exist?}
&gt;超时错误。注意:我正在尝试获取的内容包含在具有此结构<body scroll="auto" bgcolor="F4F6F7" onload="main.onload();">
Nokogiri解析的代码仅输出未由js加载的内容。如何加载该内容?
答案 0 :(得分:2)
html
方法仅包含框架和iframe的内容。因此,如果所需内容位于框架内,则需要明确告知Watir返回框架HTML。
假设页面上只有1个iframe,您可以这样做:
page = Nokogiri::HTML.parse(browser.iframe.html)