C# 不使用SRC从Web浏览器控件获取验证码图像
我知道这个问题听起来可能很熟悉,谷歌上有很多帖子都有相同的标题,但相信我,这是不同的 编辑器:VS2008(由于某些技术困难,无法升级) 问题: 如何在不使用SRC的情况下从Web浏览器获取验证码图像 你为什么不使用SRC呢? 这是我试图从中获取验证码图像的网站C# 不使用SRC从Web浏览器控件获取验证码图像,c#,.net,winforms,webbrowser-control,captcha,C#,.net,Winforms,Webbrowser Control,Captcha,我知道这个问题听起来可能很熟悉,谷歌上有很多帖子都有相同的标题,但相信我,这是不同的 编辑器:VS2008(由于某些技术困难,无法升级) 问题: 如何在不使用SRC的情况下从Web浏览器获取验证码图像 你为什么不使用SRC呢? 这是我试图从中获取验证码图像的网站 (在用户名中键入任何内容后,将显示capta图像) 现在,如果右键单击验证码图像并转到inspect元素,您将看到验证码的SRC:- 无论何时,只要你尝试去那个链接,它都会给你一个与前一个不同的验证码。这就是为什么我不能使用下面的
(在用户名中键入任何内容后,将显示capta图像) 现在,如果右键单击验证码图像并转到inspect元素,您将看到验证码的SRC:- 无论何时,只要你尝试去那个链接,它都会给你一个与前一个不同的验证码。这就是为什么我不能使用下面的代码,因为它显示的验证码与现在网络浏览器中显示的验证码不同
HtmlElement element = webBrowser1.Document.GetElementById("imgCaptcha");
string src = element.GetAttribute("src");
pictureBox1.Load(element.GetAttribute("src"));
您可以使用创建非文本元素的控制范围。然后查找图像标记,例如使用id
,然后将图像标记添加到控制范围,并调用其方法执行Copy
命令,最后从剪贴板获取图像:
.NET 3.5
添加对MSHTML
的引用。您可以通过COM
references下的MicrosoftHTML对象库
找到它,然后使用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 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
事件中
- 此外,您可能希望向代码中添加空检查
- 我使用上面的代码从by id
hplogo
获取谷歌徽标
- 我还测试了上面的代码,通过
c\u captchaedemo\u samplecaptcha\u captchaemage
作为验证码图像的id来浏览和查找验证码图像
为什么它不能在我的电脑和我朋友的电脑上工作?我检查了所有的东西,比如.net版本和ie版本,然后…看看它是否有助于@ArefBozorgmehr