我是C#语言的新手,我一直在尝试使用基于.NET的Web浏览器来自动化网站,仅在Visual Studio 2015中供个人使用。
我已经完成了文档解析,使用了Timer,正确使用了DocumentCompleted事件,以等待网页完全加载,然后解析内容,尝试使异步事件的行为类似于同步事件(以加载通过单击链接进入生成的HTML内容。一个完整的网页),以完成网页自动化的各个阶段:登录->在车站之间搭乘火车->单击立即预订链接->进入下一页并填写乘客详细信息。
一切正常,但我现在停留在最后一个阶段,即“转到下一页并填写乘客详细信息”具有验证码图片,必须解析该图片才能转到付款页面。不要误会我的意思,因为我没有尝试自动解决此验证码。这里的问题是,只有在$(document).ready
调用此javascript调用时,我才能看到加载的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时,我可以看到验证码已加载。因此,为什么在.NET浏览器中未调用此javascript调用$(document).ready
。请看下面:
后来我尝试在一个新的新项目中使用CefSharp
,我可以看到验证码已加载到其基于铬的Web浏览器中。但是我已经使用基于.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>
javascript参考方案
此处共享答案:Use latest version of Internet Explorer in the webbrowser control解决了我的问题。
我基本上必须更改Web浏览器控件使用的IE版本。
感谢Matthias herrmann
提交初始化后删除某些帖子数据 - javascript在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …
写一行到javascript文件 - javascript我正在使用数组来显示网站中的一些图像:var paintingImages; paintingImages = [ { url: 'images/objects/ron.jpg', alt: 'ron' } ]; 该js代码写在paintings.js中,我的主要js代码写在main.js文件中我已经为艺术家制作了这个…
在JavaScript中运行方法C# - javascript打扰一下,我有这种C#asp方法。受保护的无效btnSave_Click(对象发送者,EventArgs e)有谁知道我该如何发送脚本给您?可以办到?。 javascript大神给出的解决方案 是的,那可以做到。为此,您在.aspx.cs页中创建了函数,然后单击保存按钮上的代码将其复制到函数中,然后执行以下步骤。//Call cs method from J…
如何从客户端将数据插入数据库? - javascript我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …
跨python套接字将JSON传递给Javascript - javascript我正在使用python套接字与JavaScript客户端进行通信。http://docs.python.org/2/library/socket.html然后遵循JavaScript代码的一部分,ws = new WebSocket("ws://localhost:7777/"); ws.onopen = function(){ aler…