2015-05-25 49 views
0

使用watir & nokogiri解析我可以在我的銀行帳戶中找到的內容。行browser.div(:id => 'main_layout_v2_1_cell_1:0').wait_until_present告訴watir等待,直到由js加載的div出現。 (我在Chrome中禁用了javascript以檢查內容是否由javascript加載,實際上是這樣。)Watir&Nokogiri未加載框架內容

儘管如此,當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. 擴展超時並挽救錯誤,以使瀏覽器有更多時間確保代碼在那裏。

代碼在這裏: 開始

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存在於由JS加載的內容一個div是本>browser.wait_until{browser.div(:id => 'main_layout_v2_1_cell_1:0').exist?}>超時錯誤。
  • 注:我試圖獲取內容被包裹在身體標記這種結構<body scroll="auto" bgcolor="F4F6F7" onload="main.onload();">

    通過引入nokogiri解析的代碼只輸出是不被JS加載的內容。如何加載該內容呢?

    +0

    既然你說的內容被裹在身上的標籤,這讓我覺得頁面,使用IFrame。 'browser.html'將不包含框架中的HTML。相反,你需要解析iframe本身 - 例如'page = Nokogiri :: HTML.parse(browser.iframe.html)'。如果不是這樣,它可能有助於給出一個HTML的實際例子。 –

    +0

    Right @JustinKo,它輸出我正在尋找的代碼部分 - 仍然沒有解析出來,但是它輸出了我正在尋找的內容。將其設置爲答案,並將其標記爲有效,謝謝!我認爲,如果可見源代碼中沒有