C#WebBrowser自动化的许多问题



我通过自动化网站,输入数据,提交此站点并在响应时获取数据,在Web中有项目。在Google中冲浪,我决定使用WebBrowser Control选择CodeProject中最好的Acticle。

http://www.codeproject.com/articles/50544/using-the-webbrowser-control-control-in-asp-net

有很多问题,我无法通过查找Google的解决方案来追踪和尝试很多问题,但没有任何改变。

我要提取数据的网站具有以下提交表格:

<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 });
    }
}

问题是:

有些时间是工作,通常是我第一次运行该项目的时候,但是在那之后,这不行。我认为原因是我不能提交或后备错误的方式,所以我尝试这样的事情:

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(" submit");

所有这些东西都出错或重置表格或什么都不做,所以我回来了

doc.InvokeScript("setTimeout", new object[] { "submitFlights()", 20 });

提交表格。

注意:如此奇怪的一件事是:当我在网络中找到时,我创立了" submitflight()"可以正常工作。它发射了BookNow(),然后BookNow()触发了另一个脚本" formubmit()",但我在源代码中的任何地方都找不到" FormsUbmit()",包括其他一些JavaScript链接。

因为我已经成功地运行了该项目,现在,它也没有向网站发布任何数据,因此我认为问题可能在于该网站以前设置的cookie。我要去IE(Internet Explorer)删除所有cookie。之后,该代码再次起作用以提交输入数据,但要做错误的方式。我已经建立了一些cookie仍然设置了,它是关于旧的文本框" txtDepart" set" 1/11/2012"

的旧状态。

我只能弄清楚我的问题可能是关于网站或/和设置的cookie的JavaScript。

(对不起,因为我的英语不好)

尝试使用WATIN进行Web自动化。这些任务中的许多是为您包装的。

最新更新