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
我尝试过的事情:
如果我通过 Nokogiri 解析整个 HTML 是因为我首先尝试获取那些我想通过 ID、标题、文本查找的链接。 None 其中有效,因为正如 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
- 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)
使用 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
我尝试过的事情:
如果我通过 Nokogiri 解析整个 HTML 是因为我首先尝试获取那些我想通过 ID、标题、文本查找的链接。 None 其中有效,因为正如 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
- 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)