html - 搜索网页并单击按钮
问题描述
我正在尝试在网页上使用 VBA。我想出了如何登录并提交我的用户名和密码。
我需要点击 3 个按钮。一旦单击了上一个按钮,它们就会出现。我有我的 if 语句,如果我逐段浏览代码,它确实有效。
看起来它多次循环遍历每个语句。它经过 if then 部分,然后退出 for、end if、next 并返回 if 语句而不完成任务。它这样做了几次,直到最终它起作用。
我已经尝试过.document.getElementsbyId
,所有与此相关的都不起作用。
也许有一种方法可以搜索文档并让它点击按钮?
似乎它不起作用,因为直到最终它才是真的?
'Enters username and password & submits
With .document.forms("signinginn")
.User.Value = "username"
.Password.Value = "password"
.document.forms(0).submit
End With
Application.Wait DateAdd("s", 2, Now)
With IE.document
Set a = .getElementsbyTagName("input")
For Each a In .getElementsbyTagName("input")
If a.getAttribute("value") = "Start" Then
a.Click
Exit For
End If
Next a
如果我部分地播放它,这段代码就可以工作,但它会经历几次。
我能在第一时间做对吗?此代码的预期输出是立即单击按钮。
解决方案
尝试为元素存在添加一个定时循环,适当的页面加载等待,并使用 querySelector 删除当前循环并简单地定位输入元素的属性值
Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub ClickElement()
Dim ie As Object, elems As Object, t As Date
Const MAX_WAIT_SEC As Long = 10
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate2 "url"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document.forms("signinginn")
.User.Value = "username"
.Password.Value = "password"
.document.forms(0).submit
End With
While .Busy Or .readyState < 4: DoEvents: Wend
t = Timer
Do
On Error Resume Next
Set elems = .document.querySelectorAll("input[value=Start]")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While elems Is Nothing
If Not elems Is Nothing Then
elems.item(0).Click
Else
Exit Sub
End If
'Other code
Stop '<=Delete me later
.Quit
End With
End Sub
推荐阅读
- java - 在gradle中隐藏传递依赖
- java - 如何将 localhost:8080 更改为 www.myWebApp.com?
- python - 将平面 JSON 从另一个 JSON 转换为父子关系结构
- angular - 如何为chartjs返回正确的Promise
- java - EventListener 让 Spring 创建所有作用域的 bean
- php - 使用 PHPMailer 脚本连接 Zapier
- iphone - Xcode10.1 - 可以在许多 iPhone(无许可证)上进行测试吗?
- javascript - 从数组中的 JSON 对象中获取特定值
- python - 基于外键过滤数据 - Django
- perl - 如何在 perl v5.24 中获取 unicode 代码点?