我不知道如何单击下面html中的按钮
<button class="dt-button buttons-collection buttons-colvis" tabindex="0" aria-controls="theDataTable" aria-haspopup="true" title="Choose columns to display from a list">
<span>Show/Hide Columns</span>
我尝试过:
Set goBtn = ie.document.querySelector("dt-button buttons-collection buttons-colvis")
goBtn.Click
For Each ele In ie.document.getElementsByTagName("button")
If InStr(ele.innerText, "Status") > 0 Then ele.Click
Next
我也不确定如何单击
<button class="dt-button buttons-columnVisibility active" tabindex="0" aria-controls="theDataTable">
<span>Status</span></button>
<button class="dt-button buttons-columnVisibility active" tabindex="0" aria-controls="theDataTable">
<span>Conditions</span></button>
我尝试过:
Set goBtn = ie.document.querySelector("dt-button buttons-columnVisibility active").innerText("Status")
goBtn.Click
ie.document.getElementById("save-list-link").Click
两者都给我一个运行时错误
答案 0 :(得分:1)
在类名中不能有空格。
对于您的第一个查询:
ie.document.querySelector("dt-button.buttons-collection.buttons-colvis").Click
在此处查看查询:
这假定它是您所追求的具有该类名称的第一个元素。否则,您需要使用.querySelectorAll
并索引到返回的nodeList
中,以获取所需的商品,例如
ie.document.querySelectorAll("dt-button.buttons-collection.buttons-colvis").item(1).Click '<==random example.
与第二个查询的想法相同:
.dt-button.buttons-columnVisibility.active
这次,您知道有多个匹配的元素,因此您使用.querySelectorAll
并索引到nodeList
:
ie.document.querySelectorAll(".dt-button.buttons-columnVisibility.active").item(0).Click '<==status.
ie.document.querySelectorAll(".dt-button.buttons-columnVisibility.active").item(1).Click '<==conditions.
CSS查询:
您需要检查这些是您整个HTML文档的正确索引。
未找到元素:
您需要先确保页面已加载,然后再尝试选择
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
在初始URL导航之后。对于加载速度较慢的页面,您可能需要额外的循环,直到设置了元素为止,并设置超时以避免无限循环。
如果仍然找不到该元素,请查看您要选择的元素是否在带有form/frame/iframe
标签的父元素中。如果是这样,请更新显示的html以包含此/这些内容,因为也需要对其进行导航才能设置该元素。
显示/隐藏列和选项:
您可以单击“显示隐藏”,如下所示,然后列出选项并选择一个特定的选项,如下所示:
Option Explicit
Public Sub ClickShowHide()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.navigate "https://clinicaltrials.gov/ct2/results?cond=&term=&type=Intr&rslt=&recrs=b&recrs=a&age_v=&age=1&gndr=&intr=&titles=&outc=&spons=&lead=&id=&cntry=&state=&city=&dist=&locn=&phase=0&phase=1&phase=2&fund=2&strd_s=&strd_e=&prcd_s=&prcd_e=&sfpd_s=&sfpd_e=&lupd_s=&lupd_e=&sort="
.Visible = True
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector("button[title='Choose columns to display from a list']").Click
Dim optionsList As Object, i As Long
Set optionsList = .document.querySelectorAll("button[aria-controls='theDataTable']")
For i = 1 To optionsList.Length - 1
Debug.Print optionsList.item(i).innerText
Next
optionsList.item(1).Click '<==select a partic option
'.Quit
End With
End Sub