动态表上带有VBA的Excel-IE Automation

时间:2018-09-11 14:20:52

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

早上好

我希望那里的一些善良的灵魂能够帮助我解决在使用VBA操纵网站时遇到的障碍。我正在使用MS Excel 2010和Internet Explorer 11.0.56。

我对VBA有点满意,但从未使用它来导航到网站,输入信息并单击按钮。我设法弄清楚了以下几点:

在我的Excel电子表格的A列中,我列出了10位数字的案例编号。

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

<div class="wrap">
  <div class="a">
    first div
  </div>
  <div class="b">
    animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal animal
    animal animal animal animal animal animal animal animal animal animal animal animal
  </div>
</div>

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”开头。

任何人都可以帮助我检查需要添加到代码中的内容吗?谢谢!

1 个答案:

答案 0 :(得分:0)

注意:

请使用摘要工具发布实际的HTML。


通常:

如果没有适当测试的HTML,我假设以下两个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就足够了。