2013-08-23 56 views
0
<DIV class="uiMenu uiSelectorMenu" role=menu> 
<UL class=uiMenuInner bindPoint="menu"> 
<LI class="uiMenuItem uiMenuItemRadio uiSelectorOption checked" data-label="Paused"><A aria-checked=true class=itemAnchor role=menuitemradio tabIndex=0 href="#" rel=ignore><SPAN class="itemLabel fsm"><SPAN class=icon_wrap><IMG class="selector icon" src="/images/adz/ad_states/paused.gif"></SPAN>Paused</SPAN></A></LI> 
<LI class="uiMenuItem uiMenuItemRadio uiSelectorOption " data-label="Active"><A aria-checked=true class=itemAnchor role=menuitemradio tabIndex=1 href="#" rel=ignore><SPAN class="itemLabel fsm"><SPAN class=icon_wrap><IMG class="selector icon" src="/images/adz/ad_states/running.gif"></SPAN>Active</SPAN></A></LI> 
<LI class="uiMenuItem uiMenuItemRadio uiSelectorOption " data-label="Deleted"><A aria-checked=true class=itemAnchor role=menuitemradio tabIndex=2 href="#" rel=ignore><SPAN class="itemLabel fsm"><SPAN class=icon_wrap><IMG class="selector icon" src="/images/adz/ad_states/deleted.gif"></SPAN>Deleted</SPAN></A></LI></UL></DIV></DIV><SPAN bindPoint="copy_link_wrapper"><A class=copy_link href="#"></A></SPAN></DIV><SELECT bindPoint="select"><OPTION value=""></OPTION><OPTION selected value=2>Paused</OPTION><OPTION value=1>Active</OPTION><OPTION value=99>Deleted</OPTION></SELECT> </DIV></TD> 
<TD id=td_time_start_html_last_row class=td_time_start_html ?> 

以上是我想更改的下拉菜單的HTML代碼。如何以編程方式更改此下拉菜單中的選定項目?

在代碼的末尾有SELECT,OPTION等..我通常可以改變它,但是當我更改selectedIndex時,它不會在網站上做任何事情,我假定它的開始部分是代碼與此有關。

這裏是我的VB6的代碼(注意,您能告訴我在任何語言)

For i = 0 To Form1.WebBrowser1.Document.All.length - 1 ' 
    If Form1.WebBrowser1.Document.All.Item(i).nodeName = "SELECT" Then 
     For x = 0 To Form1.WebBrowser1.Document.All.Item(i).Options.length - 1 
      If InStr(Form1.WebBrowser1.Document.All.Item(i).Options(x).Text, "Active") > 0 Then 
       Form1.WebBrowser1.Document.All.Item(i).selectedIndex = x 
      End If 
     Next x 
    End If 
Next i 

當我運行代碼,我檢查與 Debug.Print Form1.WebBrowser1.Document.All的項目值.Item(i).Options(x).Selected 它確實返回true,並且上一次選擇確實表示爲false,但在網站上該項目不會更改/更新。

任何幫助,非常感謝。

+1

你有沒有可能將瀏覽器嵌入到VB6 WinForms應用程序中?沒有什麼是清楚的代碼:) –

+0

因爲你似乎在做外部網站的瀏覽器自動化,我可能會建議你使用像WatiN或Selenium這樣的庫嗎?在非結構化代碼中進行如此低級別的處理是長時間工作和糟糕結果的祕訣。如果您可以在大多數自動化庫中對單行執行相同的操作,那麼您正在爲整個DOM搜索一個「SELECT」。 –

+0

高科技,是啊我使用VB6中的WebBrowser,我相信它是一個IE插件(不確定壽)。關於你的建議,我必須做循環的原因是因爲選擇沒有ID ..但只有2個選擇在頁面上,所以它沒有什麼大不了的...也是這個下拉菜單更改是唯一的我必須做的事情:) 編輯:啊我剛剛意識到你的意思..雅是它相當低效我猜,但就像我說我只需要做這1件事,所以我不介意 – user1088794

回答

1

使用該選項的.selected屬性;這將自動更新select的.selectedIndex。 POC .HTA:

<html> 
<head> 
    <Title>select</Title> 
    <hta:application id="select" scroll = "no"> 
    <script type="text/vbscript"> 
    Function doIt() 
    ' select Item2 
    With document.getElementById("lbDemo") 
     MsgBox "Before: " & .selectedIndex 
     .options(1).selected = True 
     MsgBox "After: " & .selectedIndex 
    End With 
    End Function 
    </script> 
</head> 
<body> 
    <select id="lbDemo" size="4"> 
    <option value=Item1>Item1</option> 
    <option value=Item2>Item2</option> 
    <option value=Item3>Item3</option> 
    </select> 
    <hr /> 
    <input type="button" value="select 2" onclick="doIt" /> 
</body> 
</html> 
+0

嗨,我以前試過Form1.WebBrowser1.Document.All.Item(i).Options(x).Selected = true 它有相同的結果 我在想,SELECT代碼是假的/隱藏的,並且該網站正在使用該代碼之前\t「uiMenu uiSelectorMenu」等 – user1088794

1

不知道有多少,這將幫助,因爲我跑了一個2012 VisualBasic中贏窗體應用程序樣本,

Dim selectList = WebBrowser1.Document.GetElementsByTagName("select").Item(0) 
selectList.SetAttribute("selectedIndex", 2) 

但使用HTML片段作爲頁面內容的網頁瀏覽器控件,上面的代碼在下拉列表"Active"中僅使用HTMLElement類正確選擇了第二項。下面的屏幕截圖:

enter image description here

如果你能發佈完整的源代碼的某個地方可能更容易找出你的具體問題。

+0

不幸運:(就像我對一個不同的海報說的,我非常確定HTML中的SELECT下拉菜單只是假的,它在t之前使用了這些東西帽子。我可以發佈整個HTML ..它相當大的壽(無論如何附加一個文件?).. fyi它從他們的廣告的Facebook頁面。我正在製作一個暫停廣告系列的小應用程序。 – user1088794

+1

@ user1088794:它很可能使用JQuery以編程方式更新選項。沒有簡單的方法發佈文件。最好找到一個網站發佈項目。您可以隨時通過我的網站鏈接與我聯繫。乾杯。 –

+0

感謝HiTech,我感謝您的幫助。我會盡快與你聯繫:) – user1088794

相關問題