【问题标题】:Excel-IE Automation w/VBA on Dynamic Tables在动态表上使用 VBA 的 Excel-IE 自动化
【发布时间】:2018-09-11 14:20:52
【问题描述】:

早安,

我希望那里的某个好心人可以帮助我解决我在使用 VBA 操作网站时遇到的障碍。我正在使用 MS Excel 2010 和 Internet Explorer 11.0.56。

我对 VBA 有点熟悉,但从未使用它导航到网站、输入信息和单击按钮。我设法通过以下方式蒙混过关:

在我的 Excel 电子表格的 A 列中,我有一个 10 位数的案例编号列表。

下面的代码将打开 IE,导航到所需的网站,在我登录时暂停,然后导航到搜索屏幕,输入第一个案例编号并按 SEARCH 按钮(是的,我在此有案例编号示例硬编码,没有循环,但我可以处理的东西,所以请忽略):

Sub Button_Click()
Dim objIE As Object
Set objIE = New InternetExplorerMedium
objIE.Top = 0
objIE.Left = 0
objIE.Width = 800
objIE.Height = 600
objIE.AddressBar = 0
objIE.StatusBar = 0
objIE.Toolbar = 0
objIE.Visible = True
objIE.Navigate ("https://somewebsite.com")
MsgBox ("Please log in and then press OK")
objIE.Navigate ("https://somewebsite.com/docs")
Do
DoEvents
Loop Until objIE.ReadyState = 4
objIE.Document.all("caseNumber").Value = "1234567890"
objIE.Document.getElementById("SearchButton").Click
Exit Sub
Do
DoEvents
Loop Until objIE.ReadyState = 4
MsgBox ("Done")
End Sub

That will bring me to this screen

在搜索字段中输入的文件号将返回动态表中任意数量的文件,每个文件的左侧都有一个复选框。

对于这个例子,假设我只关心“类型”列下名为“CC8”的文件。对于给定的文件编号,永远只有一个“CC8”实例。

我需要帮助的是,如何通过 VBA 搜索此表,找到“CC8”行,然后自动选中左侧的复选框?

当我在 IE 中检查“CC8”元素时,这是与之关联的 HTML(以灰色突出显示;整个表格在“listing list-view clearfix”类下)

see here

与“CC8”项目相关的复选框的HTML如下:

HTML code here

两者的“id”具有相同的数字序列,但一个以“viewPages”开头,另一个以“doc”开头。

谁能帮助我了解我需要在代码中添加什么才能选中此复选框?谢谢!

【问题讨论】:

  • 请使用 sn-p 工具插入 html,因为我们无法从图像中复制和测试。使用 edit 按钮进行更改。
  • 包含足够多的 HTML,以便我们可以查看模式是否在多个复选框项和大小写超链接中重复。

标签: excel vba internet-explorer web-scraping automation


【解决方案1】:

注意:

请使用 sn-p 工具发布实际的 HTML。


一般情况:

没有HTML来正确测试,我假设下面2个nodeLists是相同的长度,意思是当搜索文本在aNodeList中找到时,那么假设是相同的索引可以用来定位对应的bNodeList 中的复选框:

Dim aNodeList As Object, i As Long
With objIE.document
    Set aNodeList = .querySelectorAll("a[target='_blank']")
    Set bNodeList = .querySelectorAll("[title='Search Result: Checkbox']")
End With

For i = 0 To aNodeList.Length - 1
    If aNodeList.item(i).innerText = "CC8" Then
        bNodeList.item(i).Click
        Exit For
    End If
Next

您也可以使用以下内容,因为您说每个项目都带有 viewPages 前缀:

Set aNodeList = .querySelectorAll("a[id^='viewPages']")

其他意见:

传统的复选框将具有checked 属性和语法 bNodeList.item(i).Checked = True,但由于我在您的元素中看不到该属性,因此我假设 .Click 就足够了。

【讨论】:

  • 好吧,我不能使用 objIE.document.getElementById("doc793196159218")。点击因为每个文件编号之间的 ID 都会发生变化。因此,我需要以某种方式确定哪个 ID 与该特定文件号的“CC8”链接相关:
  • 你是怎么搞定底部的?
猜你喜欢
  • 2020-01-16
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2016-10-10
相关资源
最近更新 更多