【问题标题】:Copy image from webbrowser to clipboard将图像从浏览器复制到剪贴板
【发布时间】:2023-11-27 01:48:01
【问题描述】:

我需要将图像从网络浏览器控件复制到我的剪贴板,因为每次重新加载时图像都会发生变化,我试图获取“src”属性并将我的picturebox.imagelocation 更改为该属性,但图像在图片框与浏览器控件上的图片不同。

我正在尝试自动化 Web 服务,它需要填写验证码,并且每次加载页面时都会更改,这就是为什么我需要获取当前显示的验证码。

【问题讨论】:

  • 更多关于你目前如何做的细节。此外,您可能不得不放弃 Web 浏览器控件。
  • @Jeremy Child 我就是这样做的,如果可以的话,请注意“Captcha”是一个带有图片框控件的表单。 For Each element As HtmlElement In WebBrowser1.Document.GetElementsByTagName("img") If element.GetAttribute("id") = "siimage" Then Captcha.PictureBox1.ImageLocation = element.GetAttribute("src") End If Next And what do您的意思是“放弃”网络浏览器控件?我需要它才能使流程正常工作。
  • 我只是不喜欢WebBrowser 控件,别介意我。
  • @user2230481 您可能希望将该代码从您的评论移到问题中。它会更容易阅读。
  • 我的应用程序需要网络浏览器控件。

标签: vb.net image browser clipboard captcha


【解决方案1】:

假设您使用的是 Windows 窗体(如果您使用 WPF,则需要更改获取文档的方式)并且用户没有在 IE 区域设置中阻止剪贴板访问

Dim doc As IHTMLDocument2 = DirectCast(webBrowser1.Document.DomDocument, IHTMLDocument2)
Dim body As IHTMLElement2 = DirectCast(doc.body, IHTMLElement2)
Dim imgRange As IHTMLControlRange = DirectCast(body.createControlRange(), IHTMLControlRange)
Dim image As IHTMLControlElement = DirectCast(DirectCast(doc, IHTMLDocument3).getElementById(sImgID), IHTMLControlElement)
imgRange.add(image)
imgRange.execCommand("Copy", False, Nothing)

【讨论】:

  • 这正是我要说的,终于有人明白了。
  • 我启用了剪贴板访问并在我的代码中实现了这个方法,但它仍然没有复制图像。
【解决方案2】:

伪代码:

标签为“img”的每个元素。获取“src”属性。启动HttpWebRequest 的实例或使用WebClient.DownloadFile 作为源。

您需要做一些技巧来确定源与 url 的关系。例如,src 可以是“/img/pony.jpg”,在这种情况下,您需要从WebBrowser 控件中获取 url 的根以使其成为“http://mylittle.com/img/pony.jpg”。

【讨论】:

  • 看到每次请求时图像都会变化,这是没用的,我需要实际使用 WebBrowser1.Document.ExecCommand 才能成功获取正确的图像。