gpt4 book ai didi

html - 如何使用 VBA 在网站的列表框中选择多个项目?

转载 作者:行者123 更新时间:2023-12-03 20:45:12 27 4
gpt4 key购买 nike

我登录到一个网站并尝试选择列表中的所有项目。

登录有效,但在提交之前未突出显示或选择项目。

Sub BrowseToSite() 'Login to site

'set ie = internetexplorer for reference
Dim ie As New SHDocVw.InternetExplorer
Dim htmldoc As MSHTML.HTMLDocument
Dim htmlinput As MSHTML.IHTMLElement
Dim htmlbuttons As MSHTML.IHTMLElementCollection
Dim objIE As Object

'see window and navigate to website (HOURLY VOLUME ENERGY COMPOSITION - HVEC)
ie.Visible = True
ie.navigate "www.website.com"

'wait for brower to load
Do While ie.readyState <> READYSTATE_COMPLETE
Loop

'Enters username and password
Set htmldoc = ie.document
Set htmlinput = htmldoc.getElementById("USER")
htmlinput.Value = "LoginUsername"
Set htmlinput = htmldoc.getElementById("PASSWORD")
htmlinput.Value = "Password1"

'finds form > submit button (under class = "LoginSubmit")
htmldoc.forms(0).submit

'select all Locations
ie.document.getElementsByName("ctl00$contentPlaceHolder$ctl00$availableLocations").Value = "1297"
ie.document.getElementsByName("ctl00$contentPlaceHolder$ctl00$availableLocations").Value = "3216"
ie.document.getElementsByName("ctl00$contentPlaceHolder$ctl00$availableLocations").Value = "3135"
objIE.document.getElementsByName("ctl00$contentPlaceHolder$ctl00$availableLocations")(0).Click

End Sub

这是 HTML 代码:

<tr>
<td class="fieldLabel">Location:</td>
<td class="fieldData" colspan="3">


<select size="12" name="ctl00$contentPlaceHolder$ctl00$availableLocations" multiple="multiple" id="contentPlaceHolder_ctl00_availableLocations" tabindex="8" class="fullWidth" onFocus="resetList(&#39;operatorList&#39;);">
<option value="1297">1297 - Test1</option>
<option value="3216">3216 - Test2</option>
<option value="3135">3135 - Test3</option>

最佳答案

当前代码:

通过尝试设置集合的值(这是 getElementsByName 返回的值),您应该会收到一条错误消息,告诉您 .value 不可用。它是您集合中节点的属性,需要索引到您的集合中。由于您没有提到错误,我想知道您是否在实际代码中使用 On Error Resume Next 来掩盖错误?

@TimWilliams 在评论中提出了一个重要的观点,即在执行 .Submit、.Click、.Refresh 等操作后,留出足够的时间让网页更新。

此外,使用适当的页面加载等待时间:

While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend

你可以更新循环语法(我老了!)


您可以尝试什么:

假设父 select 启用了多选,那么我将使用 querySelectorAll 收集所有选项的 nodeList 并循环该列表设置 .Selected = True 在每个节点上。

您可以使用父 selectidchild combinatortype 来收集 nodeList选择器 option 内的 child

Dim nodes As Object, i As Long

Set nodes = htmlDoc.querySelectorAll("#contentPlaceHolder_ctl00_availableLocations > option")

For i = 0 To nodes.Length - 1
nodes.item(i).Selected = True
Next

这将允许您进行选择,而不必通过其在选择选项列表中的索引或使用 value 属性值等来指定每个节点。例如使用 value 属性单独设置如下:

htmlDoc.querySelector("[value='1297']").Selected =True

等...


在这里阅读 querySelectorAll 使用的 css 选择器:

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

关于html - 如何使用 VBA 在网站的列表框中选择多个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65988800/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com