如何在 excel vba Internet Explorer 中使用通配符
How to use wildcard in excel vba internet explorer
你能告诉我如何在 excel vba Internet Explorer 中使用通配符吗?
id="btn_edit_card_1NLQNQD0D93O"
每次那个数字都不一样。如何通过
单击该按钮
document.getElementById
代码
中没有class
<a id="btn_edit_card_1NLQNQD0D93O" href="/trades/bejelentes_egyszerusitett/1NLQNQD0D93O">Editing basic data</a>
正如@Nathan_Sav 所建议的,我可能会非常明智地补充一点,您将不得不解决您的集合问题。例如,遍历所有 "a" 标签,直到找到一个 "btn_edit_card_" 作为其名称一部分的标签。除非有多个 "a" 标签包含该短语,否则这将起作用。
Set els = ie.Document.getElementsByTagName("a")
For Each el In els
If el.ID Like "btn_edit_card*"
el.click
Exit For
' Debug.Print el.ID, el.Name
End If
Next el
如果你的IE版本是9以上可以使用HTMLDocument
class的querySelectorAll
方法。
这使用 CSS selectors 启用按属性过滤元素。在您的情况下,您正在寻找具有 id
且以 btn_edit_card
开头的 a
元素。这个选择器是:
a[^=btn_edit_card]
其中 ^=
表示 以 开头。
请参阅下面的示例代码,该代码从该页面提取评论 - 它们都是您问题下方 table 中的所有 tr
元素,它们都有 id
个 comment-123456
] 其中数字可以从评论更改为评论(因为它们唯一地存储在数据库等中):
Option Explicit
Sub GetElementByWildcard()
Dim objIe As InternetExplorer
Dim objDoc As HTMLDocument
Dim objElements As IHTMLDOMChildrenCollection
Dim objElement As Object
Dim lngCounter As Long
On Error GoTo ExitFunction
'get page content
Set objIe = New InternetExplorer
objIe.Visible = False
objIe.navigate ""
Do While objIe.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
'get document
Set objDoc = objIe.document
'get any <tr> with an id starting with comment-
Set objElements = objDoc.querySelectorAll("tr[id^=comment-]")
'iterate output
lngCounter = 0
While lngCounter < objElements.Length
Set objElement = objElements.Item(lngCounter)
Debug.Print objElement.innerText
lngCounter = lngCounter + 1
Wend
ExitFunction:
If Err.Number <> 0 Then
Debug.Print Err.Description
End If
objIe.Quit
Set objDoc = Nothing
Set objIe = Nothing
End Sub
你能告诉我如何在 excel vba Internet Explorer 中使用通配符吗?
id="btn_edit_card_1NLQNQD0D93O"
每次那个数字都不一样。如何通过
单击该按钮 document.getElementById
代码
中没有class <a id="btn_edit_card_1NLQNQD0D93O" href="/trades/bejelentes_egyszerusitett/1NLQNQD0D93O">Editing basic data</a>
正如@Nathan_Sav 所建议的,我可能会非常明智地补充一点,您将不得不解决您的集合问题。例如,遍历所有 "a" 标签,直到找到一个 "btn_edit_card_" 作为其名称一部分的标签。除非有多个 "a" 标签包含该短语,否则这将起作用。
Set els = ie.Document.getElementsByTagName("a")
For Each el In els
If el.ID Like "btn_edit_card*"
el.click
Exit For
' Debug.Print el.ID, el.Name
End If
Next el
如果你的IE版本是9以上可以使用HTMLDocument
class的querySelectorAll
方法。
这使用 CSS selectors 启用按属性过滤元素。在您的情况下,您正在寻找具有 id
且以 btn_edit_card
开头的 a
元素。这个选择器是:
a[^=btn_edit_card]
其中 ^=
表示 以 开头。
请参阅下面的示例代码,该代码从该页面提取评论 - 它们都是您问题下方 table 中的所有 tr
元素,它们都有 id
个 comment-123456
] 其中数字可以从评论更改为评论(因为它们唯一地存储在数据库等中):
Option Explicit
Sub GetElementByWildcard()
Dim objIe As InternetExplorer
Dim objDoc As HTMLDocument
Dim objElements As IHTMLDOMChildrenCollection
Dim objElement As Object
Dim lngCounter As Long
On Error GoTo ExitFunction
'get page content
Set objIe = New InternetExplorer
objIe.Visible = False
objIe.navigate ""
Do While objIe.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
'get document
Set objDoc = objIe.document
'get any <tr> with an id starting with comment-
Set objElements = objDoc.querySelectorAll("tr[id^=comment-]")
'iterate output
lngCounter = 0
While lngCounter < objElements.Length
Set objElement = objElements.Item(lngCounter)
Debug.Print objElement.innerText
lngCounter = lngCounter + 1
Wend
ExitFunction:
If Err.Number <> 0 Then
Debug.Print Err.Description
End If
objIe.Quit
Set objDoc = Nothing
Set objIe = Nothing
End Sub