Cam*_*ate 2 ruby screen-scraping watir nokogiri watir-webdriver
我一直在使用Ruby和Nokogiri从类似于来自hollister网站的URL中提取数据:http://www.hollisterco.com/webapp/wcs/stores/servlet/TrackDetail? storeId = 10251&catalogiId = 10201&langId = -1&urL = TrackDetailView&ORDERNUMBER = 1316358
我的脚本现在看起来像这样:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
page = Nokogiri::HTML(open("http://www.hollisterco.com/webapp/wcs/stores/servlet/TrackDetail?storeId=10251&catalogId=10201&langId=-1&URL=TrackDetailView&orderNumber=1316358"))
puts page.css("h3[data-property=GLB_ORDERNUMBERSYMBOL]")[0].text
Run Code Online (Sandbox Code Playgroud)
我的问题是Hollister页面有一些异步的数据加载,这样当我的脚本检查页面区域的页面元素的订单特定数据时,它还不存在.IE浏览器中,<h3>与data-property=GBL_ORDERNUMBERSYMBOL不存在,但在浏览器中,如果你让它加载另一个十秒钟,DOM和HTML的改变,以反映具体订单的详情.
捕获事后加载的数据的最佳方法是什么?我已经尝试过使用watir-webdriver,但不知道我需要做些什么才能让它工作.
尝试安装Capybara-webkit(确保安装了QtWebKit,否则gem安装将失败).这将为您提供无头解决方案.然后尝试这个:
require 'capybara-webkit'
require 'capybara/dsl'
require 'nokogiri'
require 'open-uri'
url = 'http://www.hollisterco.com/webapp/wcs/stores/servlet/TrackDetail?storeId=10251&catalogId=10201&langId=-1&URL=TrackDetailView&orderNumber=1316358'
#change the capybara config to DSL and to use webkit
include Capybara::DSL
Capybara.current_driver = :webkit
visit(url)
doc = Nokogiri::HTML.parse(body)
Run Code Online (Sandbox Code Playgroud)
然后像往常一样解析身体.要删除所有错误消息,请尝试以下操作:
Capybara.register_driver :webkit do |app|
Capybara::Driver::Webkit.new(app, :stdout => nil)
end
Run Code Online (Sandbox Code Playgroud)