2015-06-30 30 views
1

在下面的代碼中,我有一個頁面加載。一旦完成加載,我登錄到該網站。一旦登錄完成並下一頁加載,我需要點擊一個鏈接。指定的參數超出有效值的範圍瀏覽網站時

問題是,鏈接嘗試點擊登錄後的頁面才能完成加載。

我得到的錯誤是:指定的參數超出了有效值的範圍。 參數名稱:索引

int linkcount = 0; 

    public PNow() 
    { 
     InitializeComponent(); 
     webBrowser1.Navigate("https:...com/login.aspx"); 
    } 

    private void PNow_Load(object sender, EventArgs e) 
    { 

    } 

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     linkcount++; 

     if (linkcount == 1) 
     { 
      webBrowser1.Document.GetElementById("Login1_UserName").SetAttribute("value", "username"); 
      webBrowser1.Document.GetElementById("Login1_Password").SetAttribute("value", "password"); 
      webBrowser1.Document.GetElementById("Login1_LoginButton").InvokeMember("click"); 
     } 

     if (linkcount == 2) 
     { 
      HtmlElement link = (from HtmlElement elem in webBrowser1.Document.GetElementsByTagName("a") 
      where elem.GetAttribute("title") == "Time Clock Entry" 
      select elem).ElementAt(0); 
     } 
    } 

我已經使用了Thread.Sleep(5000)嘗試;但這只是停止整個計劃,問題仍然存在。

謝謝。

爲包含鏈接如下頁面的部分中的標記......

<ul> 
<li id="menuLi_2708"><a class="noTimer container-menu" href="javascript:void(0)" onclick="showFirstChildMenu(this)">Career Development</a><ul> 
<li id="menuLi_2708"><a href="#" class="page-link" onclick="showMenu('pages/EDIT/CDAvailableDevOppSummary.aspx?USParams=PK=ESS!MenuID=2708!PageRerId=2711!ParentRerId=2708','72','2708','2711', false, false, this.innerHTML, true);" data-RerID='2711'>Available</a></li> 
</ul> 
<ul> 
<li id="menuLi_2708"><a href="#" class="page-link" onclick="showMenu('pages/EDIT/CDCurrentDevOppSummary.aspx?USParams=PK=ESS!MenuID=2708!PageRerId=2732!ParentRerId=2708','72','2708','2732', false, false, this.innerHTML, true);" data-RerID='2732'>Current</a></li> 
</ul> 
<ul> 
<li id="menuLi_2708"><a href="#" class="page-link" onclick="showMenu('pages/EDIT/CDCompletedDevOppSummary.aspx?USParams=PK=ESS!MenuID=2708!PageRerId=2735!ParentRerId=2708','72','2708','2735', false, false, this.innerHTML, true);" data-RerID='2735'>Completed</a></li> 
</ul> 
</li> 
</ul> 
<ul> 
<li id="menuLi_2148"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/UTMSSO.aspx?USParams=PK=ESS!MenuID=2148!PageRerId=2148!ParentRerId=72','72','2148','2148', false, false, this.innerHTML, true);" data-RerID='2148'>Time Management</a></li> 
</ul> 
<ul> 
<li id="menuLi_2147"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/UTMEntry.aspx?USParams=PK=ESS!MenuID=2147!PageRerId=2147!ParentRerId=72','72','2147','2147', false, false, this.innerHTML, true);" data-RerID='2147'>Time Clock Entry</a></li> 
</ul> 
<ul> 
<li id="menuLi_95"><a class="noTimer container-menu" href="javascript:void(0)" onclick="showFirstChildMenu(this)">Pay</a><ul> 
<li id="menuLi_95"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/EePayrollPayCheckDetail.aspx?USParams=PK=ESS!MenuID=95!PageRerId=1417!ParentRerId=95','72','95','1417', false, false, this.innerHTML, true);" data-RerID='1417'>Current Pay Statement</a></li> 
</ul> 
<ul> 
<li id="menuLi_95"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/EePayrollPayCheckHistory.aspx?USParams=PK=ESS!MenuID=95!PageRerId=18!ParentRerId=95','72','95','18', false, false, this.innerHTML, true);" data-RerID='18'>Pay History</a></li> 
</ul> 
<ul> 
<li id="menuLi_95"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/EePayrollYTDSummary.aspx?USParams=PK=ESS!MenuID=95!PageRerId=20!ParentRerId=95','72','95','20', false, false, this.innerHTML, true);" data-RerID='20'>YTD Summary</a></li> 
</ul> 
<ul> 
<li id="menuLi_95"><a href="#" class="page-link" onclick="showMenu('pages/VIEW/WPRThirdPartyPayHistory.aspx?USParams=PK=ESS!MenuID=95!PageRerId=3561!ParentRerId=95','72','95','3561', false, false, this.innerHTML, true);" data-RerID='3561'>Third Party Pay</a></li> 
</ul> 

回答

0

此塊看上去非常可疑對我說:

if (linkcount == 2) 
{ 
    HtmlElement link = (from HtmlElement elem in webBrowser1.Document.GetElementsByTagName("a") 
    where elem.GetAttribute("title") == "Time Clock Entry" 
    select elem).ElementAt(0); 
} 

這似乎是你有沒有帶有名爲title的屬性的元素,在對它們調用ToString()之後,它們評估爲「時鐘條目」。因此,該序列包含零元素,這會導致引發ArgumentOutOfRangeException。

我會仔細檢查這個塊,並且非常仔細地瀏覽它。在調試器中設置一些手錶。使用立即窗口。仔細檢查你在那裏看到的東西。更可能的是,你不會退縮你的想法。

UPDATE

這是你的超級鏈接:

<a href="#" 
    class="page-link" 
    onclick="showMenu('pages/VIEW/UTMEntry.aspx?USParams=PK=ESS!MenuID=2147!PageRerId=2147!ParentRerId=72','72','2147','2147', false, false, this.innerHTML, true);" 
    data-RerID='2147'> 
    Time Clock Entry 
</a> 

注意,你沒有一個屬性計算結果爲 「時鐘輸入」。相反,元素的InnerHtmlInnerText屬性評估爲「時間時鐘條目」。

更改您的代碼如下:

if (linkcount == 2) 
{ 
    HtmlElement link = (from HtmlElement elem in webBrowser1.Document.GetElementsByTagName("a") 
    where elem.InnerHtml == "Time Clock Entry" 
    select elem).ElementAt(0); 
} 

這應該讓你去。

+0

我需要點擊鏈接的代碼如下:Time Clock Entry感謝您的協助。 –

+0

@SeanConnelly你能爲我們提供問題的標記嗎? –

+0

我的大腦現在運行得不好......如果您要求查看我正在查看的頁面的HTML,那是1200多行。或者頁面該部分的小部分工作? –

相關問題