2009/11/10(Tue) 14:30:38 編集(投稿者)
No43421 (なっと さん) に返信
> なるほど…簡単に取れるものではないのですね。
>
> WebClientでダウンロードした Htmlを解析して、イメージを取得するプログラムは作成したのですが、
> クッキーではじかれてしまい、WebBrowser経由で取れるかな?と思ったのですが…。
試しにやってみたら、取れたので参考まで・・・
ただし、C++ CLIではありませんので!(あしからず)
Private Sub SaveImage(ByVal wb As WebBrowser, ByVal SavePath As String)
With wb.Document
If .Images.Count > 0 Then
For i As Integer = 0 To .Images.Count - 1
Dim hec As HtmlElement
Dim ic As mshtml.HTMLImg
Dim imageName As String
hec = .Images.Item(i)
ic = CType(hec.DomElement, mshtml.HTMLImg)
If ic.nameProp <> String.Empty Then
imageName = SavePath + "\" + ic.nameProp
Using wc As New System.Net.WebClient()
wc.DownloadFile(ic.href, imageName)
End Using
Else
Dim ici As System.Drawing.Imaging.ImageCodecInfo
Dim webreq As System.Net.HttpWebRequest
Dim webres As System.Net.HttpWebResponse
ici = GetEncoderInfo("image/" + ic.mimeType.ToLower)
imageName = SavePath + "\" + ic.alt + System.IO.Path.GetExtension(ici.FilenameExtension.Split(";"c)(0)).ToLower()
webreq = CType(System.Net.WebRequest.Create(ic.href), System.Net.HttpWebRequest)
webres = CType(webreq.GetResponse(), System.Net.HttpWebResponse)
Using strm As System.IO.Stream = webres.GetResponseStream()
Using fs As New System.IO.FileStream(imageName, System.IO.FileMode.Create, System.IO.FileAccess.Write)
Dim b As Integer
While True
b = strm.ReadByte()
If b = -1 Then Exit While
fs.WriteByte(Convert.ToByte(b))
End While
fs.Close()
End Using
strm.Close()
End Using
End If
Next
End If
End With
End Sub
Private Function GetEncoderInfo(ByVal mineType As String) As System.Drawing.Imaging.ImageCodecInfo
mineType = mineType.Replace("compuserve ", "")
Dim encs() As System.Drawing.Imaging.ImageCodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
Dim enc As System.Drawing.Imaging.ImageCodecInfo
For Each enc In encs
If mineType.IndexOf(enc.MimeType) > -1 Then
Return enc
End If
Next
Return Nothing
End Function
● 呼び出し方は・・・
SaveImage(WebBrowser1, Application.StartupPath)
としてみました。
※ ちょっと無理やりのところがありますが、エラーしたら若干の追加修正で
可能かと思います。
以上。参考まで