Html 使用VBA&;我需要点击页面上的某个文本
以下是我可以看到的HTML宏和目标的一部分:Html 使用VBA&;我需要点击页面上的某个文本,html,excel,vba,internet-explorer,controls,Html,Excel,Vba,Internet Explorer,Controls,以下是我可以看到的HTML宏和目标的一部分: 20190180963865 类Ligne0 OrderNO在主体中是唯一的。我需要用我创建的数组交叉检查“20190180963865”,当发现时,我可以单击元素,将我带到另一个页面 我所尝试的: **MSGBOX.ie.document.url为我提供了正确的url。我在这里裁剪了宏的顶部以节省空间 MSGBOX BOO应该给我“20190180963865”,但没有给我任何东西。我添加了.innertext和.value,但是msgbox没有显
20190180963865
类Ligne0 OrderNO在主体中是唯一的。我需要用我创建的数组交叉检查“20190180963865”,当发现时,我可以单击元素,将我带到另一个页面
我所尝试的:
**MSGBOX.ie.document.url为我提供了正确的url。我在这里裁剪了宏的顶部以节省空间
MSGBOX BOO应该给我“20190180963865”,但没有给我任何东西。我添加了.innertext和.value,但是msgbox没有显示出来
然后用BOO我希望能够。点击IE上的文本
**我已经勾选了“引用Microsoft internet控件”和“Microsoft HTML对象库”您说msgbox Boo没有返回任何内容。可能的原因是,您正在循环中设置该变量,并且正在获取循环外的值。因此,当您尝试获取该值时,它可能会被替换为空值 基于您上面的代码,我开发了这个示例,它将遍历网页上的所有链接,并匹配其内部文本和类名,然后单击链接 VBA代码:
Sub demo()
Dim i As Long
Dim URL As String
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
URL = "D:\Backup20190913\tests\295.html"
IE.Navigate URL
Do While IE.readyState = 4: DoEvents: Loop 'Do While
Do Until IE.readyState = 4: DoEvents: Loop 'Do Until
Set Alllinks = IE.document.getElementsByTagName("A")
For Each Hyperlink In Alllinks
If Hyperlink.innerText = "20190180963865" And Hyperlink.className = "Ligne0 OrderNo" Then
Hyperlink.Click
End If
Next Hyperlink
'Unload IE
'Set IE = Nothing
End Sub
示例HTML代码:
<!doctype html>
<html>
<head>
<script>
function abc()
{
alert("clicked...");
}
</script>
</head>
<body>
<a class="Ligne0 OrderNo" style="width: 100%; height: 100%; display: block;" onclick="abc()">20190180963865</a>
</body>
</html>
函数abc()
{
警报(“单击…”);
}
此外,您可以根据自己的需求修改示例。您只需要从工作表中获取值,并在上面的代码中进行匹配
如果您在应用此建议方面有任何困难,请告知我们 您不需要循环,而且类已经用于感兴趣的a
标记,因此您不想在已处于正确级别时尝试选择“按标记名”。querySelector返回单个节点;匹配指定选择器的第一个节点-在本例中,该节点是感兴趣元素的复合类名(复合类由“.”连接,“.”表示css类选择器)
如果按类名获取元素,并且元素的类在页面上是唯一的,那么元素集合中应该只有一个元素。为什么需要按标记获取元素?您只需检查innertext
并单击它就可以了。不确定当类是唯一的时,为什么需要按标记名提取页面上的所有元素?这只是一个循环链接并匹配其innertext和类名的示例。如果op没有理由,那么op肯定可以使用类名直接单击元素,而不使用循环。
<!doctype html>
<html>
<head>
<script>
function abc()
{
alert("clicked...");
}
</script>
</head>
<body>
<a class="Ligne0 OrderNo" style="width: 100%; height: 100%; display: block;" onclick="abc()">20190180963865</a>
</body>
</html>
Dim BOO As String, element As Object
Set element = HTML.querySelector(".Ligne0.OrderNo")
If Not element Is Nothing Then
BOO = element.innerText
'do whatever else when element is found
End If