【发布时间】:2017-07-02 20:05:24
【问题描述】:
我是 C# 语言的新手,我一直在尝试在 Visual Studio 2015 中使用基于 .NET 的网络浏览器仅供个人使用自动化网站。
我已经完成了文档解析,使用了 Timer,正确使用了 DocumentCompleted 事件来等待网页完全加载然后解析内容,尝试使异步事件表现得像同步事件(为了加载通过单击生成的 HTML 内容一个完整加载的网页中的链接)等,以完成网页自动化的各个阶段:登录 -> 获取车站之间的火车 -> 点击立即预订链接 -> 转到下一页并填写乘客详细信息。
一切正常,但我现在卡在最后一个阶段,即“转到下一页并填写乘客详细信息”有一个验证码图像,必须解析才能转到支付页面。不要误会我的意思,因为我不想让这个验证码自动解决。这里的问题是我看不到只有在调用此javascript调用$(document).ready时才加载的验证图像。
我认为我的项目有一些错误的代码正在停止加载验证码,因此,我创建了一个非常基本的新项目,只添加了下面的代码并浏览了不同的阶段我自己看看是否验证码确实会加载,但不幸的是它不会加载。
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,我可以看到验证码正在加载到其基于铬的网络浏览器中。但是我已经使用基于 .NET 的网络浏览器进行了很多编码,因此我现在想坚持使用后者来解决这个问题。
这是因为 .NET 网络浏览器使用了一些非常旧的 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>
【问题讨论】:
-
有没有可以用来测试的url?很可能存在与 IE 不兼容的 javascript 错误,并且您问题中的 url irctc.co.in/eticketing/loginHome.jsf 与我在浏览器中看到的不一样。
-
@AlexanderHiggins:登录后,URL 发生了变化。这就是为什么您看不到相同的 URL。不幸的是,您必须使用
https://www.irctc.co.in/eticketing/loginHome.jsf并使用正确的凭据登录才能移至有问题的页面。我也从 IE 浏览器显示了图像。它在那里加载,但没有在 .NET 网络浏览器中加载。 -
@AlexanderHiggins:这是 URL
https://www.irctc.co.in/eticketing/trainbetweenstns.jsf,验证码未在 .NET 浏览器中加载。从第一个 URL 登录后,您无法手动使用此 URL 再次在同一选项卡、新选项卡等中查看该页面,因为它会再次登陆登录页面。 -
@Rohit
$(document).ready正在使用仅支持Internet Explorer: 9+jquery.com/browser-support 的jQuery库。你可能想看看这个问题:stackoverflow.com/q/17922308/5111904 -
由于我无法理解,请确保您没有在 webbrowser 控件中抑制脚本错误。
标签: javascript c# .net visual-studio