Hi,
2009/5/19 Mario R. [email protected]:
rel=stylesheet><LINK media=print href=“/CF/css/print.css” type=text/css
Any idea how to get the real html content?
If you are using Ruby 1.8.6 on Windows, try this code:
require ‘win32/api’
require ‘watir’
IID_IPersistStreamInit =
[0x7FD52380,0x4E07,0x101B,0xAE,0x2D,0x08,0x00,0x2B,0x2E,0xC7,0x13].pack(‘LSSC8’)
CreateStreamOnHGlobal = Win32::API.new(‘CreateStreamOnHGlobal’, ‘LLP’,
‘L’,‘ole32’)
OleSaveToStream = Win32::API.new(‘OleSaveToStream’, ‘LL’, ‘L’,‘ole32’)
GetHGlobalFromStream = Win32::API.new(‘GetHGlobalFromStream’, ‘LP’,
‘L’,‘ole32’)
GlobalSize = Win32::API.new(‘GlobalSize’, ‘L’, ‘L’)
GlobalLock = Win32::API.new(‘GlobalLock’, ‘L’, ‘L’)
CopyMemory = Win32::API.new(‘RtlMoveMemory’, ‘PLL’, ‘V’)
GlobalUnlock = Win32::API.new(‘GlobalUnlock’, ‘L’, ‘L’)
browser = Watir::Browser.new
browser.goto(“http://www.google.com”)
ptr = browser.document.inspect.scan(/:(0x[\da-f]+)?>/).to_s.hex
p = 0.chr * 4
CopyMemory.call(p,ptr+16,4)
data = p.unpack(‘L’).first
p = 0.chr * 4
CopyMemory.call(p,data,4)
dispatch = p.unpack(‘L’).first
lpVtbl = 0.chr * 4
table = 0.chr * 28
CopyMemory.call(lpVtbl,dispatch,4)
CopyMemory.call(table,lpVtbl.unpack(‘L’).first,28)
table = table.unpack(‘L*’)
queryInterface = Win32::API::Function.new(table[0],‘PPP’,‘L’)
p = 0.chr * 4
hr = queryInterface.call(dispatch,IID_IPersistStreamInit,p)
persiststream = p.unpack(‘L’).first
p = 0.chr * 4
CreateStreamOnHGlobal.call(0, 1, p)
stream = p.unpack(‘L’).first
if OleSaveToStream.call(persiststream,stream) == 0
p = 0.chr * 4
GetHGlobalFromStream.call(stream,p)
h = p.unpack(‘L’).first
size = GlobalSize.call(h)
buf = 0.chr * size
ptr = GlobalLock.call(h)
if ptr != 0
CopyMemory.call(buf,ptr,size)
GlobalUnlock.call(ptr)
html = buf[16…-1]
else
html = nil
end
end
puts html
Regards,
Park H.