C#Webbrowser自动化的许多问题

时间:2012-11-01 22:26:21

标签: c# cookies automation browser form-submit

我通过自动化网站,输入数据,在提交此网站后获取数据,并在响应时获取数据。在谷歌冲浪,我决定使用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。

(抱歉,因为我的英语不好)

1 个答案:

答案 0 :(得分:1)

尝试使用WatiN进行Web自动化。其中许多任务都是为你而完成的。