2013-05-02 83 views
3

我正在編寫一個Excel宏,它將導航到公用事業公司網站,然後下載鏈接到該帳戶的所有聲明。要進入聲明下載頁面,我需要導航到每個帳戶的摘要頁面。所有帳戶都列在下拉列表中 - 當我手動點擊列表中的其他帳戶時,該頁面會更新爲新帳戶。使用我從this question得到的提示,我能夠讓宏改變下拉值。問題是,即使它從列表中選擇了一個新值,頁面也不會更新到新帳戶。不幸的是,沒有直接鏈接到每個帳戶的頁面,因爲它看起來像下拉列表將值傳遞給腳本。我試着從不同的帳戶複製這個網址,但不管它在URL上的帳號是什麼。下面是VBA代碼中的問題:使用VBA Excel通過更改下拉值來導航網站

Do While i < intNumberAcct 
    ie.document.getElementById("ctl00_PageContent_AccountDropDown_BillingAccountsDropDown").selectedindex = i 
    Call downloadStatement 
    i = i + 1 
Loop 

我試圖刷新IE它改變了下拉值後,但是當它刷新它恢復到下拉原始值。選中新索引後,我也試過ie.document.getElementById("ctl00_PageContent_AccountDropDown_BillingAccountsDropDown").Click,但沒有任何效果。

這裏是下拉的HTML源代碼 - 我刪除了一大塊賬戶,因此它也不會這麼長,混淆了賬戶號碼和地址與「X」:

<table style="width: 100%" cellpadding="0" cellspacing="0"> 
<tr> 
    <td valign="top" class="AccountDropDownLabelCells" style="height: 25px;"> 
     <strong>Billing Account:</strong> 
    </td> 
    <td valign="top" style="text-align: left" align="left"> 
     <select name="ctl00$PageContent$AccountDropDown$BillingAccountsDropDown" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$PageContent$AccountDropDown$BillingAccountsDropDown\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_PageContent_AccountDropDown_BillingAccountsDropDown" style="width:250px;"> 
      <option value="xxxxx">xxxxx(16 xxxxx Dr)</option> 
      <option selected="xxxxx" value="xxxxx">xxxxx(18 xxxxxDr)</option> 
      <option value="xxxxx">xxxxx(20 xxxxx Dr)</option> 
      <option value="xxxxx">xxxxx(22 xxxxxDr)</option> 
      <option value="xxxxx">xxxxx(28 xxxxx Dr)</option> 
      <option value="xxxxx">xxxxx(30 xxxxxDr)</option> 
      <option value="xxxxx">xxxxx(34 xxxxxDr)</option> 
</select> 
     &nbsp; 
    </td> 
</tr> 


</table> 

任何非常感謝在下拉菜單中選擇它後如何讓頁面更新到新帳戶的想法。

+0

當你(個人)更改在下拉框中沒有頁面刷新帳戶?你也可以展開你的「選擇」框的例子來包含「表單」標籤。 – NickSlash 2013-05-02 21:37:51

+0

既然你已經混淆了名字,我認爲這是機密數據。推測你已經輸入密碼來訪問這些信息。該網站需要能夠將後續傳輸鏈接到您。一種常用的技術是分配包含在每個後續傳輸中的會話ID。你的代碼必須模擬這種鏈接技術,否則網站會假定每次傳輸都是一個新的查詢。 – 2013-05-02 23:42:21

+0

Santosh的提示爲我工作。我對這個網站想要重新驗證沒有任何問題。 – Michael 2013-05-03 17:01:55

回答

3

設置下拉列表後,您需要觸發更改事件。

選擇name = 「ctl00 $ PageContent $ AccountDropDown $ BillingAccountsDropDown」 平變化=「JavaScript的:的setTimeout(' __doPostBack(\ ' ctl00 $ PageContent $ AccountDropDown $ BillingAccountsDropDown \ ',\ ' \ ')',0) 「 id =」ctl00_PageContent_AccountDropDown_BillingAccountsDropDown「style =」width:250px;「

doc.getElementById("xs_r_gender").selectedindex=1 
doc.getElementById("xs_r_gender").FireEvent("onchange") 
+0

謝謝 - 我添加了FireEvent,它完美的工作! – Michael 2013-05-03 16:59:59