我是C#语言的新手,我一直在尝试在Visual Studio 2015中使用基于.NET的webbrowser 进行自动化,仅用于个人用途。
我已完成文档解析,使用Timer,正确使用DocumentCompleted事件等待网页完全加载然后解析内容,试图使异步事件表现得像同步事件(为了加载点击生成的HTML内容完整加载的网页中的链接)等,以完成网页自动化的各个阶段:登录 - >在车站之间获得火车 - >点击立即预订链接 - >转到下一页并填写乘客详细信息。
一切正常但我现在停留在最后阶段,即“转到下一页并填写乘客详细信息”有一个验证码图片必须解决才能转到付款页面。不要误会我的意思,因为我不是想让这个验证码自动解决。这里的问题是,我没有看到只有在调用此javascript调用$(document).ready
时才会加载的captch图像。
我认为我的项目有一些错误的代码停止加载验证码,因此,我创建了一个非常基本的新项目,只添加了下面的代码并导航通过不同阶段我自己来查看是否验证码真的加载但不幸的是它不会加载。
namespace TestWebBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("https://www.irctc.co.in/eticketing/loginHome.jsf");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
}
}
请参阅下文。突出显示的部分是我期待验证码的地方。
我必须告诉你,我不是网页设计师,因此我只了解网站的工作原理。
我在这个论坛上经历了几个问题,没有任何帮助。
Internet Explorer也从后面使用.NET浏览器,但在使用IE时,我可以看到验证码正在加载。那么,为什么这个javascript调用$(document).ready
没有在.NET浏览器中被调用。请参阅以下内容:
我后来尝试在一个全新的项目中使用CefSharp
,我可以看到验证码在其基于铬的webbrowser中被加载。但是我已经使用基于.NET的webbrowser做了很多编码,因此我想在此时坚持后者以便解决这个问题。
是否发生这种情况是因为.NET webbrowser正在使用一些非常旧的IE版本配置?
请帮助我理解。
更新1 :添加javascript
<script type="text/javascript">
$(document).ready(function(){
var isJsBlocked=0;
if (typeof(nlpLoadCaptchaAsync) == 'function'){
nlpLoadCaptchaAsync();
}else{
isJsBlocked=1;
}
setTimeout(function(){
var isNLPCaptcha = document.getElementById('nlpIdentifier');
if(isNLPCaptcha == null || isNLPCaptcha=='' ) {
var nlptrack = new Image();
nlptrack.src="http://irctclive.nlpcaptcha.in/temp_redirect_count/irctc_timeout.php?ref=f2c5d744485b0b4251461454db791111&isJsBlocked="+isJsBlocked+"&dynamicParameter="+Date.now();
nlpCaptchaTimeOut(true);
}
}, 5000 );
});
</script>
答案 0 :(得分:1)
答案在此处分享:Use latest version of Internet Explorer in the webbrowser control解决了我的问题。
我基本上不得不更改我的webbrowser控件使用的IE版本。
感谢Matthias herrmann