在不使用 SRC 的情况下从 Web 浏览器控件获取验证码图像

我知道这个问题可能听起来很熟悉,谷歌上有很多标题相同的帖子,但相信我,这是不同的。

编辑器:VS2008(因技术问题无法升级)

如何在不使用SRC 的情况下从Web 浏览器获取验证码图像

你为什么不使用SRC?

下面是我正努力让我的网站验证码图片 https://services.gst.gov.in/services/login
(该capta的形象出现,一旦你键入用户名什么)

现在,如果您右键单击验证码图像并转到检查元素,您将看到验证码的SRC是:-

http://img4.mukewang.com/6199e93d00016f7104150117.jpg

https://services.gst.gov.in/services/captcha?rnd=0.5313315062651027


并且每当您尝试访问该链接时,它都会为您提供与前一个不同的验证码。这就是为什么我不能使用下面的代码,因为它显示的验证码与现在在WebBrowser 中显示的验证码不同。


HtmlElement element = webBrowser1.Document.GetElementById("imgCaptcha");

string src = element.GetAttribute("src");

pictureBox1.Load(element.GetAttribute("src"));


翻过高山走不出你
浏览 168回答 1
1回答

潇湘沐

您可以使用createControlRange创建一个controlRange非文本元素。然后找到图像标签,例如使用id,然后将图像标签添加到控制范围并调用它的execCommand方法执行Copy命令,最后从剪贴板中获取图像:.NET 3.5添加对MSHTML. 您可以Microsoft HTML Object Library在COM参考下找到它,然后添加using mshtml;. 然后:IHTMLElement2 body = (IHTMLElement2)webBrowser1.Document.Body.DomElement;IHTMLControlRange controlRange = (IHTMLControlRange)body.createControlRange();IHTMLControlElement element = (IHTMLControlElement)webBrowser1.Document    .GetElementById("imgCaptcha").DomElement;controlRange.add(element);controlRange.execCommand("Copy", false, null);pictureBox1.Image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap); .NET >= 4.0您不需要添加引用,您可以利用dynamic:dynamic body = webBrowser1.Document.Body.DomElement;dynamic controlRange = body.createControlRange();dynamic element = webBrowser1.Document.GetElementById("imgCaptcha").DomElement;controlRange.add(element);controlRange.execCommand("Copy", false, null);pictureBox1.Image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);笔记:当文档完成时运行代码,例如在DocumentCompleted事件中。此外,您可能希望在代码中添加空检查。我使用上面的代码通过 id从https://www.google.com获取谷歌徽标hplogo。我还通过浏览https://demos.captcha.com/demos/features/captcha-demo.aspx并通过c_captchademo_samplecaptcha_CaptchaImage作为验证码图像的 id查找验证码图像来测试上述代码。
打开App,查看更多内容
随时随地看视频慕课网APP