【问题标题】:Find button from onclick attribute and click从 onclick 属性中找到按钮并单击
【发布时间】:2017-08-30 23:43:07
【问题描述】:

我正在使用 VBA 并坚持在 HTML PAGE 中触发 Download 按钮,该按钮检查以下代码:

<input onClick="javascript:__dopostback('GridView1','Accountnumber$0')" type="button" value="Download"></input>

此页面上存在多个下载按钮,我想点击第一个。

在这些元素中唯一的属性是:

"OnClick=javascript:__dopostback('GridView1','Accountnumber$0')"

但我不知道如何用下面的 VBA 触发:

On Error GoTo Err_Clear
 myURL = "Enter your url"
 Set MyBrowser = New InternetExplorer
 MyBrowser.Silent = True
 MyBrowser.Navigate myURL
 MyBrowser.Visible = True
 Do
 Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE
 Set htmlDoc = MyBrowser.Document
 htmlDoc.all.txtAccNo.Value = ""
 htmlDoc.all.ddlReasons.Value = ""
 htmlDoc.all.txtRequester.Value = "" 
 htmlDoc.all.txtMobNo.Value = ""
 htmlDoc.all.txtLandLine.Value = ""
 htmlDoc.all.txtEmailAdd.Value = ""
 htmlDoc.all.ddlRelation.Value = ""
 htmlDoc.all.button1.Click

 '**OnClick event required here **

 htmlDoc.getElementsByXpath("input[type=""button""]")(0).Click  '<--(Not Working)

 Err_Clear:
 If Err <> 0 Then
 Err.Clear
 Resume Next
 End If 

【问题讨论】:

  • getElementsByXpath 不在我的 Microsoft HTML 对象库中 - 在你的库中吗?
  • 是的,我有,如果你没有 HTML 对象库 那么 OnClick 事件
  • 微软办公室 2012。

标签: html excel vba onclick intranet


【解决方案1】:

有趣的是,您正在调用 getElementsByXPath,但我在我的 Microsoft HTML 对象库 (Win10/Excel 2013) 中找不到此方法。

也许您可以尝试使用 CSS 选择器,而不是与 HTMLDocument 类的 querySelector 方法一起使用:

然后,而不是使用:

htmlDoc.getElementsByXpath("input[type=""button""]")(0).Click  <--(Not Working)

你可以试试这个(未经测试):

Dim strSelector As String
Dim objElement As Object

strSelector = "table#GridView1 > tbody > tr > td > input[onclick=""javascript:__doPostBack('GridView1','Account_number$0')""]"

Set objElement = htmlDoc.querySelector(strSelector)
If Not objElement Is Nothing Then
    objElement.Click
Else
    MsgBox "Selector did not work!"
End If

编辑

查看了页面源代码,并符合 OP 声明:

此页面上存在多个下载按钮,我想点击第一个。

然后我们可以将选择简化为:

table#GridView1 > tbody > tr > td > input[onclick]

这意味着在表格正文中找到第一个具有onclick 属性的&lt;input&gt;

所以更新后的 VBA 是:

Dim strSelector As String
Dim objElement As Object

strSelector = "table#GridView1 > tbody > tr > td > input[onclick]"

Set objElement = htmlDoc.querySelector(strSelector)
If Not objElement Is Nothing Then
    objElement.Click
Else
    MsgBox "Selector did not work!"
End If

选择器在 Chrome 控制台中进行了测试,所以我的假设是它应该以类似的方式在 VBA 中工作。 HTH。

【讨论】:

  • 给出错误并突出显示最后一条指令objElement.Click
  • 不幸的是,这意味着 querySelector 不起作用,objElement 将是 Nothing。我更新了代码以提醒是否是这种情况。你有我可以使用的公共 URL 以便我可以测试代码吗?
  • 是的,我有公共网址:(ke.com.pk/complaints-services/duplicate-bill) 但它也有 Captcha(字符图像)。
  • 有什么解决办法吗? @罗宾
  • 您引用的那个 URL 没有一个 ID 为 GridView1... 所以我无法测试。我发布了示例代码以提供解决方案,但不幸的是,除非我们能看到您正在使用的 HTML,否则没有更多可提供的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2018-12-27
  • 2022-08-23
  • 2018-06-12
  • 2022-12-05
相关资源
最近更新 更多