我使用下面的代码成功获取使用webbrowser控件加载的页面内每张图片的副本。
Dim doc As IHTMLDocument2 = DirectCast(wb.Document.DomDocument, IHTMLDocument2)
Dim imgRange As IHTMLControlRange = DirectCast(DirectCast(doc.body, HTMLBody).createControlRange(), IHTMLControlRange)
For Each img As IHTMLImgElement In doc.images
imgRange.add(DirectCast(img, IHTMLControlElement))
imgRange.execCommand("Copy", False, Nothing)
Using bmp As Bitmap = DirectCast( _
Clipboard.GetDataObject().GetData(DataFormats.Bitmap), Bitmap)
bmp.Save(img.nameProp)
End Using
Next
我从这里得到了代码:Copy an image from cache of web browser control present in VB.NET
然而,我感兴趣的图片是在iFrame中。
我尝试过改变:
Dim doc As IHTMLDocument2 = DirectCast(wb.Document.DomDocument, IHTMLDocument2)
到
Dim doc As IHTMLDocument2 = DirectCast(wb.Document.Window.Frames(iFrameID).Document.DomDocument, IHTMLDocument2)
但是我收到了“拒绝访问”错误。我猜(不确定)因为iframe的src在不同的域上。
有解决这个问题的方法吗?
谢谢!
答案 0 :(得分:0)
如果iFrame包含来自与父母不同的域的内容,则表示您没有运气。您可以尝试不同的解决方案并通过Ajax检索iFrame的页面并解析出图像src。另一种方法是使用像PhantomJs(或VB,PHP等)这样的程序来服务器端来检索页面并解析它以便检索图像。