0

キャプチャ画像を使用するページにログインする必要があります。私が行うことは次のとおりです。

1-WebClientを使用してキャプチャ画像をメモリにダウンロードします。

2-画像に対してOCRを実行し、コードを抽出します。

3-WebBrowserを使用してログインの詳細とコードを投稿します。

例:

WebBrowser1.Navigate("URL", "", paramInByte, "Content-Type:application/x-www-form-urlencoded")

WebBrowserはログイン前に別のキャプチャ画像を必要とし、間違ったコードエラーが発生すると思います。数ヶ月前に動いていたので、サイトを変えたと思います。この問題を解決するにはどうすればよいですか?WebClientのCookie、ヘッダー、クエリなどをWebBrowserに渡す必要があるかもしれませんが、それらの間で通信する方法がわかりません。

4

1 に答える 1

0

私はこれを見つけました(wはWebBrowserオブジェクトです)。

最初に、WebBrowserのサイズをキャプチャ画像サイズに設定します。これは、以下のコードがWebBrowserで表示される部分を占めるためですが、WebBrowser自体が表示される必要はありません。

'scroll to the picture, so we have a WebBrowser object just like a picture box
For Each i As HtmlElement In w.Document.GetElementsByTagName("img")
    If i.GetAttribute("src").Contains("here string to identify captcha image") Then
        i.ScrollIntoView(True)
    End If
Next

'Create bitmap
Dim bmp As New Bitmap(w.Width, w.Height, Imaging.PixelFormat.Format32bppArgb)
Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp)
Dim hdc As IntPtr = g.GetHdc

'Do the Drawing
Dim pUnk As IntPtr = System.Runtime.InteropServices.Marshal.GetIUnknownForObject(w.ActiveXInstance)
OLE32.OleDraw(pUnk, 1, hdc, New Rectangle(0, 0, w.Width, w.Height))
System.Runtime.InteropServices.Marshal.Release(pUnk)

'Release DC and dispose
g.ReleaseHdc(hdc)
g.Dispose()

また、OLE32クラスを宣言する必要があります

Public Class OLE32
    Public Declare Function OleDraw Lib "ole32.dll" (ByVal pUnk As IntPtr, ByVal dwAspect As Integer, ByVal hdcDraw As IntPtr, ByRef lprcBounds As Rectangle) As Integer
End Class

このようにして、コントロールのコンテンツをbmpとして取得し、新しいページを要求せずにOCRを実行できます。

于 2012-09-26T09:07:23.687 に答える