我通过自动化网站,输入数据,在提交此网站后获取数据,并在响应时获取数据。在谷歌冲浪,我决定使用Webbrowser控件在codeproject中选择最佳的moticle。
http://www.codeproject.com/Articles/50544/Using-the-WebBrowser-Control-in-ASP-NET
有很多问题我无法通过谷歌找到解决方案来追踪和尝试,但没有任何改变。
我想提取数据的网站的提交形式如下:
<form id = "ctl103">
<input type="radio" id="rdoFlightTypeReturn" name="rdoFlightType"
value="return" checked="checked"/>
<input type="radio" id="rdoFlightTypeOneWay" name="rdoFlightType"
value="oneway" />
<input name="so long" type="text" id="txtOrigin" autocomplete="off" />
<input name="very much" type="text" id="txtDestination" autocomplete="off" />
<input type="text" id="txtDepart" autocomplete="off" name="txtDepart"/>
//dd/mm/yyyy format
<input type="text" id="txtReturn" autocomplete="off" name="txtReturn" />
//dd/mm/yyyy format
<button type="submit" class="png-bg" id="btnSearchForFlights">Search Flight</button>
</form>
我写的代码提交此表单:
void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc = ((WebBrowser)sender).Document;
if (doc.Title.Equals("Home") && loginCount++ < 3)
{ try
{
HtmlElement element = doc.GetElementById("rdoFlightTypeOneWay");
element.InvokeMember("click");
}
catch {
ieBrowser.Navigate("http://www.my---favoritesite.com");
return;
}
doc.GetElementById("txtOrigin").InnerText = "SGN";
doc.GetElementById("txtDestination").InnerText = "HAN";
doc.GetElementById("txtDepart").InnerText = "03/11/2012";
doc.InvokeScript("setTimeout", new object[] { "submitFlights()", 20 });
}
else
{
doc.InvokeScript("setTimeout", new object[] {
string.Format("window.external.getHtmlResult({0})", navigationCounter), 10 });
}
}
问题是:
有一段时间它是有效的,通常在第一次运行项目的时候很少,但在那之后,它就不行了。我认为原因是我无法提交或Postback错误的方式,所以我尝试这样的事情:
HtmlElement button_searchFlight = doc.GetElementById("btnSearchForFlights");
button_searchFlight.InvokeMember("click");
或
mshtml.HTMLAnchorElementClass obj =
(HTMLAnchorElementClass)button_searchFlight.DomElement;
obj.click();
或
mshtml.HTMLButtonElementClass button1 =
(mshtml.HTMLButtonElementClass)button_searchFlight.DomElement;
button1.click();
或
doc.InvokeScript("submitFlight()");
或 doc.GetElementById( “ctl03”)InvokeMember( “提交”);
所有这些错误或重置表单或什么都不做,所以我回来了
doc.InvokeScript("setTimeout", new object[] { "submitFlights()", 20 });
提交表格。
注意:有一点很奇怪:当我在网上找到时,我已经创建了“submitFlight()”可以工作。它解雇了bookNow(),之后,bookNow()又触发了另一个脚本“formsubmit()”,但我无法在源代码中的任何地方找到“formsubmit()”,包括页面的其他一些javascript链接。
因为我已经成功运行该项目,现在,它也没有向网站发布任何数据,所以我认为问题可能出在网站之前设置的cookie中。我去IE(Internet Explorer)删除所有cookie。之后,代码再次工作以提交输入数据,但做错了方法。我已经创建了一些cookie仍然设置,它是关于旧文本框“txtDepart”设置“1/11/2012”
所有我可以想出我的问题可能是关于网站的javascript或/和它设置的cookie。
(抱歉,因为我的英语不好)
答案 0 :(得分:1)
尝试使用WatiN进行Web自动化。其中许多任务都是为你而完成的。