Vb.net Net验证码等待用户输入

Vb.net Net验证码等待用户输入,vb.net,webbrowser-control,captcha,Vb.net,Webbrowser Control,Captcha,我正在尝试将验证码图像复制并显示在图片盒中 我目前正在使用以下代码查找相关ID,因为在刷新页面时它会不断更改: Dim htmlDocument As HtmlDocument = Me.IEMC.Document Dim htmlElementCollection As HtmlElementCollection = htmlDocument.Images For Each htmlElement As HtmlElemen

我正在尝试将验证码图像复制并显示在图片盒中

我目前正在使用以下代码查找相关ID,因为在刷新页面时它会不断更改:

           Dim htmlDocument As HtmlDocument = Me.IEMC.Document
            Dim htmlElementCollection As HtmlElementCollection = htmlDocument.Images
            For Each htmlElement As HtmlElement In htmlElementCollection
                Dim imgUrl As String = htmlElement.GetAttribute("id")
                If imgUrl.Contains("wlspispHIPBimg") Then

                    GRABMYDARNIMG!

                End If
            Next
这很有效。我可以让它找到正确的ID。但是我将如何复制此ID的图像内容,并将其粘贴到我的picturebox中

我尝试了以下几点:

                IEMC.Document.GetElementById(imgUrl).Focus()
                IEMC.Document.ExecCommand("Copy", False, Nothing)
但似乎无法将其粘贴到任何地方,或者不确定如何正确复制元素

我也尝试过这样的事情:

Dim O As Object

Set O = WebBrowser1.Document.body.createControlRange()
Call O.Add(WebBrowser1.Document.All("imgcode"))
Call O.execCommand("Copy")

Set Picture1.Picture = Clipboard.GetData
但这在VB.NET中不起作用。我不知道下一步该试什么

将图像粘贴到picturebox似乎很容易,假设它被复制到剪贴板上。我只使用这行代码:

PictureBox1.Image = Clipboard.GetImage
如果有人知道如何做到这一点,我将非常感激

注意:无法从URL下载图像。它必须来自webbrowser中已加载的元素。一旦验证码图像加载一次,图像url就会被删除

编辑:尝试以下建议。。但无论如何,我都无法用它来保存任何img

Dim doc As mshtml.IHTMLDocument = DirectCast(IEMC.Document.DomDocument, mshtml.IHTMLDocument)
                    Dim imgRange As mshtml.IHTMLControlRange = DirectCast(DirectCast(doc.body, mshtml.HTMLBody).createControlRange(), mshtml.IHTMLControlRange)
                    Dim imagename As String = String.Empty
                    Try
                        For Each img As mshtml.IHTMLImgElement In doc.images
                            imgRange.add(DirectCast(img, mshtml.IHTMLControlElement))
                            imgRange.Select()
                            imgRange.execCommand("Copy", False, Nothing)
                            Using bmp As Bitmap = DirectCast(Clipboard.GetDataObject().GetData(DataFormats.Bitmap), Bitmap)
                                bmp.Save("C:\captchaPic.jpg")
                            End Using
                            imagename = img.nameProp

                            Exit For
                        Next
                    Catch aaa As System.Exception
                    End Try

我做了类似的事情,将CaptchaImage保存到磁盘,然后将其发送到decaptchaapi。这是我的代码,它是c语言的,但您可以轻松转换: 所以保存到磁盘,并使用它将其放入图片框

     IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;
     IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
               string imagename = string.Empty;
                 try
                   {
                    foreach (IHTMLImgElement img in doc.images)
                     {
                       imgRange.add((IHTMLControlElement)img);
                       imgRange.execCommand("Copy", false, null);
                       using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                                {
                                    bmp.Save(@"captchaimages\captchaPic.jpg");
                                }
                                imagename = img.nameProp;
                                break;

                            }
                        }
                        catch (System.Exception aaa)
                        { 
                        }

隐马尔可夫模型。。我不太清楚如何正确地转换这个。。我使用了一个代码转换器,但我似乎无法让它工作。特别是imgRange.add和imgRange.execCommand以及doc.body.Spoke太早。让它运行,但它实际上从来没有保存任何东西。好像它实际上找不到图像。花了一点功夫(我也把它搁置了一段时间),但还是用上面的方法找到了它。谢谢@Gematria,很高兴我帮了你
For Each capimg As HtmlElement In WebBrowser6.Document.Images
    If capimg.GetAttribute("src").Contains("papi/media?") Then
        Dim CD As mshtml.IHTMLDocument2 = CType(WebBrowser6.Document.DomDocument, Global.mshtml.IHTMLDocument2)
        Dim Images As mshtml.IHTMLControlRange = CType(CType(CD.body, mshtml.HTMLBody).createControlRange, Global.mshtml.IHTMLControlRange)
        For Each imgs As mshtml.IHTMLImgElement In CD.images
            If imgs.GetAttribute("src").ToString.Contains("papi/media?") Then
                Images.add(CType(imgs, Global.mshtml.IHTMLControlElement))
                Images.execCommand("Copy", False, Nothing)
                Dim captchaimage As Image
                captchaimage = CType(Clipboard.GetDataObject.GetData(DataFormats.Bitmap), Image)
                PictureBox1.Image = captchaimage

            End If
        Next
    End If
Next