Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用SRC从Web浏览器控件获取验证码图像_C#_.net_Winforms_Webbrowser Control_Captcha - Fatal编程技术网

C# 不使用SRC从Web浏览器控件获取验证码图像

C# 不使用SRC从Web浏览器控件获取验证码图像,c#,.net,winforms,webbrowser-control,captcha,C#,.net,Winforms,Webbrowser Control,Captcha,我知道这个问题听起来可能很熟悉,谷歌上有很多帖子都有相同的标题,但相信我,这是不同的 编辑器:VS2008(由于某些技术困难,无法升级) 问题: 如何在不使用SRC的情况下从Web浏览器获取验证码图像 你为什么不使用SRC呢? 这是我试图从中获取验证码图像的网站 (在用户名中键入任何内容后,将显示capta图像) 现在,如果右键单击验证码图像并转到inspect元素,您将看到验证码的SRC:- 无论何时,只要你尝试去那个链接,它都会给你一个与前一个不同的验证码。这就是为什么我不能使用下面的

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

编辑器:VS2008(由于某些技术困难,无法升级)

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

你为什么不使用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