我正在使用vba自动完成网页上的某些搜索参数。我可以选择/单击常规下拉列表及其中的元素,但是这一带有复选框的下拉列表令人有些头痛。
因此,我得到了页面,等待加载等信息。我可以单击一个下拉列表,甚至可以单击相关的下拉列表以显示列表。但是,当我要选择此特定列表中的一个框时,它会停止。
我尝试了很多东西,所以我不能一一列举。但是我怀疑如果您知道我是新手的HTML,这很容易。
很遗憾,我无法提供该网站的链接,因为它是内部的,但我可以提供一些html。
因此,下面是单击下拉列表并使用DOM Explorer标识复选框的地方:(是的,我用|替换了<和>以获取html。对此感到抱歉。)
| DIV id = ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown class =“ RadComboBoxDropDown RadComboBoxDropDown_Web20” style =“ WIDTH:248px; FLOAT:left; DISPLAY:block; TOP:0px; VISIBILITY:visible” | jQuery111V1016bb;宽度:jQuery111V1516b987455“ “ style =” HEIGHT:78px“ jQuery1111035398745548310944 =” 9“
| DIV class = rcbCheckAllItems jQuery1111035398745548310944 =“ 18” || LABEL || INPUT class = rcbCheckAllItemsCheckBox CHECKED type = checkbox value =“” |全部选中| / LABEL || / DIV |
| UL class = rcbList style =“ LIST-STYLE-TYPE:none; ZOOM:1; PADDING-BOTTOM:0px; PADDING-TOP:0px; PADDING-LEFT:0px; MARGIN:0px; PADDING-RIGHT:0px “ jQuery1111035398745548310944 =” 14“ |
| LI class = rcbHovered_itemTypeName =“ Telerik.Web.UI.RadComboBoxItem” || LABEL || INPUT class = rcbCheckBox CHECKED type = checkbox value =“” | ERP /中心详细信息| / LABEL || // LI | >
| LI class = rcbItem_itemTypeName =“ Telerik.Web.UI.RadComboBoxItem” || LABEL || INPUT class = rcbCheckBox CHECKED type = checkbox value =“” |子类别和族| / LABEL || / LI || // UL || / DIV || / DIV |
我的代码(或其相关部分):
Dim ie As InternetExplorer
Set ie = New InternetExplorerMedium
Set Doc = CreateObject("htmlfile")
Set Doc = ie.document
Dim SelectByInput As Object
Set SelectByInput = Doc.getElementByID_
("ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown")
'This is OK. but miss part to get to the Checkbox.
请注意,我已经尝试过“ Doc.getElementsByClassName(“ rcbCheckAllItemsCheckBox”),但遇到运行时错误438,对象不支持此属性或方法。
我希望SelectByInput.Checked = True在达成交易后会达成协议 可以只进入元素类=“ rcbCheckAllItemsCheckBox”(标签为“检查所有”),或者同时进入两个元素类(带有标签“ ERP /中心详细信息”和“子类别和族”。)
我的解决方案需要确保两个相同的结果。 1)选中顶部复选框(标签“全部选中”) 2)同时选中了两个其他复选框谢谢。
答案 0 :(得分:0)
尝试以下
ie.document.querySelector(".rcbCheckAllItemsCheckBox").click 'N.B. if already checked will uncheck
或
ie.document.querySelector(".rcbCheckAllItemsCheckBox").checked = True
答案 1 :(得分:0)
另一种方法是遍历输入控件并尝试检查类和其他属性。如果匹配,则选中复选框。
代码:
Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub demo()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
URL = "C:\Users\Administrator\Desktop\91.html"
IE.navigate URL
Do While IE.readyState = 4: DoEvents: Loop
Do Until IE.readyState = 4: DoEvents: Loop
HWNDSrc = IE.HWND
SetForegroundWindow HWNDSrc
Set ElementCol = IE.document.getElementsByTagName("input")
For Each btnInput In ElementCol
' Debug.Print btnInput.className
If btnInput.className = "rcbCheckAllItemsCheckBox" Then
btnInput.Checked = True
End If
Next btnInput
'Set IE = Nothing
' Set objElement = Nothing
' Set objCollection = Nothing
End Sub
输出: