从WebBrowser控件到一个图片框的validation码图像

我需要能够将validation码图像放入我的表格上的图片框中,原因是我需要缩放validation码图像以供视觉受损的用户使用。

它似乎是一个如此简单的任务,只需从网页上拍摄图像并将其放入图片框中,但事实certificate并非如此简单。 我有WebBrowser控件的forms和在一个网站注册,我需要在图片框中的validation码图像。 问题是validation码图像是由JavaScript生成的,当java脚本运行时,它会给出validation码图像的URL。 但每当java脚本运行时,validation码图像就会发生变化。 我只想要WebBrowser上的validation码图像控制当前页面。

任何帮助将不胜感激。


这是我的代码。

public void FacebookRegistration() { HTMLDoc = (mshtml.HTMLDocument)WBrowser.Document.DomDocument; iHTMLCol = HTMLDoc.getElementsByTagName("input"); foreach (IHTMLElement iHTMLEle in iHTMLCol) { if (iHTMLEle.getAttribute("name", 0) != null) { strAttriName = iHTMLEle.getAttribute("name", 0).ToString(); if (strAttriName == "firstname") { iHTMLEle.setAttribute("value", FirstName, 0); continue; } if (strAttriName == "lastname") { iHTMLEle.setAttribute("value", LastName, 0); continue; } if (strAttriName == "reg_email__") { iHTMLEle.setAttribute("value", EmailID, 0); continue; } if (strAttriName == "reg_passwd__") { string s = GetRandomString(); Random ran = new Random(); iHTMLEle.setAttribute("value", s+ran.Next(1111,9999), 0); break; } } } iHTMLCol = HTMLDoc.getElementsByTagName("option"); foreach (IHTMLElement iHTMLEle in iHTMLCol) { try { if (iHTMLEle.innerText.Contains("Male")) { iHTMLEle.setAttribute("selected", "selected",0); } if (iHTMLEle.innerText.Contains("Jun")) { iHTMLEle.setAttribute("selected", "selected", 0); } Random ran = new Random(); if (iHTMLEle.innerText.Contains("4")) { iHTMLEle.setAttribute("selected", "selected", 0); } Random ran1 = new Random(); if (iHTMLEle.innerText.Contains(ran1.Next(1920,1985).ToString())) { iHTMLEle.setAttribute("selected", "selected", 0); } } catch { } } iHTMLCol = HTMLDoc.getElementsByTagName("input"); int i = 0; foreach (IHTMLElement iHTMLEle in iHTMLCol) { string s = iHTMLEle.className; if (iHTMLEle.className == "UIButton_Text" && iHTMLEle.getAttribute("value", 0).ToString() == "Sign Up") { if (i != 0) { iHTMLEle.click(); break; } i++; } } private void WBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (CurrentSocial == "facebook") { FacebookRegistration(); } } } 

在facebook.com的注册页面,有validation码,如果你去页面源,那么你只会看到:

 <input type="hidden" id="captcha_persist_data" name="captcha_persist_data" value="AAAAAQAQiCw5zhFGOsVF6TbDBX8d_wAAAGvqENqFy5KkvMip5AIv3QSF7BS7goiHfAC7fTkzr8hW61cq3s1d23Tw7m-WAi-21Uzt1l3frkLf4obBEuZZMwga_hbcUhnWXu4P382QsJ7J0WtAbo5USXWuVjzv_KD1SMyTWhf34AGorQd27dFqZc0a" /?; 

在这个输入标签中,我找到了javascript的url,它给出了captcha url

 javascript url: http://api.recaptcha.net/challenge?k=6LezHAAAAAAAADqVjseQ3ctG3ocfQs2Elo1FTa_a&ajax=1&xcachestop=0.31520985781374&authp=nonce.tt.time.new_audio_default&psig=H48rD9d3_QogBfxxKAmzFZ7CG10&nonce=hl77BQn58EsYsPpPwQ2TIA&tt=r3zaWETv27-0igoIw5ndwnHt_W4&time=1256413208&new_audio_default=1 

如果你浏览这个url,你会得到像这样的validation码:

 var RecaptchaState = { challenge : '02UflxsCli4nYg-oG48n5bNDm6ywMlvE62UwXQssF__eJAfSiv2TXuac-1tbu2FThwakgH65IdExWDy9qyr1sYbRuwyQFZD7Dk1eE_fXuoSn9tliqnYeMq__LEF6-GTEm0H6TChOtvpwL2G3C1BsBriw8FFaKqkaTwbNoJeAfzI_j9qYnPaqtHJYillevhRsxyaQVYfLvqai7p0Sfu3849BFpamlbfE3to3KTXi5cZ0xlmuGkMkuZhvq_GyK_z-ZXq9z_Ls8xZlywN0jlIOsSEvI9QJq_69X-X3Moq9lFBcmqWYaKbf7faRQt19aJGB4DdBC1PqQIC', timeout : 25000, server : 'http://api.recaptcha.net/', site : '6LezHAAAAAAAADqVjseQ3ctG3ocfQs2Elo1FTa_a', error_message : '', programming_error : '', is_incorrect : false }; Recaptcha.challenge_callback(); 

和原始validation码url看起来像这样:

 http://api.recaptcha.net/image?c=027CxC4LbBbzVJKy-1xX_wRBf7Gmi4AvgikDVaKeYjBCmiX4XBzGymWC7XRfWx4LLQgfscKnfeB7U305MhlVN0X4vAkrK84ac3jybRJ3UJPUQ8rnlJOS7lqNqpRpolYSd6WBxMShhrzqbx-5ScL0JAsN7cJRMLMqeQsPHg1QB7g4kp4KxKO1aEONsUibahnCC8baLHGSIYJ5Q1Gcr1MPvJ9i_a5qQCilT1tWXwAKE_fkVGi31_un3OxHbNm9UmMemRp7IZ9C9ZLU4IjMApxVJOWXMYqjt588z_ZVcYG2dtY6Dh0b4R1aAQcp0UXFTggdWtsjPw7wIC 

然后你会得到validation码,但不是我想要的,因为javascript每次都会改变capthca图像。 所以我没有得到当前在webbrowser中显示的validation码

您可以将图像复制到剪贴板并从那里读取。 或者,您可以解析页面以获取图像的URL,并查看是否可以从缓存中挖掘图像文件

如何以编程方式将IMG元素复制到剪贴板

是否可以使用reCaptcha.net? 您可以免费注册,将脚本添加到您的页面,然后他们完成剩下的工作。 他们可能没有为视障人士进行缩放,但他们确实有文字转语音。 如果你不需要,重新发明轮子是没有意义的。 当然,您需要访问您网页上的互联网,这样如果您的网站是某种内联网或私有网络,这可能会成为一个问题。 希望有所帮助。