【问题标题】:Is there a way to access the first element in a column on a website using VBA?有没有办法使用 VBA 访问网站列中的第一个元素?
【发布时间】:2023-03-12 22:05:01
【问题描述】:

这是网站页面中的列的屏幕截图。

它位于网站页面中:

如您所见,所有行都有一个“完成”按钮,您可以按下该按钮,然后是多行。这些行指的是出口。所以专栏不是静态的,而是不断变化的。

但是,每次我运行宏时,我都想访问该列的第一行。

这是上面屏幕截图中第一个“已完成”按钮的 HTML 代码的示例代码:

我有很多具有相同的类名。以下图中突出显示的行为例:

我真的不知道如何编写 VBA 代码来始终访问本专栏中的第一个“已完成”字节。

PS:在 HTML 代码中,在标签“a”中,onclick="....." 是不断变化的。所以我不能使用它作为参数来访问所需的字段并单击所需的按钮。

如果有人能帮我弄清楚如何做到这一点,我会很高兴的。

谢谢你:)

【问题讨论】:

  • 请通过edit使用sn-p工具插入html,以便人们使用它进行测试。包括您当前的编码尝试。另外,查看您的 html - 有没有办法让我们识别表格?如果可能,请记住包含 url。

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


【解决方案1】:

如果要点击第一列的“完成”按钮,可以使用下面的代码:

Set doc = objIE.Document
doc.getElementsByTagName("tr")(0).getElementsByTagName("td")(0).getElementsByTagName("a")(0).Click

代码获取第一个<tr>,然后获取第一个<td>,然后在其中获取<a>

【讨论】:

  • 感谢您的帮助。我尝试将您的代码输入为: ie3.getElementsByClassName("main_table_data advancedSearch_results_table gray_background").getElementsByTagName("td")(1).getElementsByTagName("a")(1).Click 当我运行代码时没有任何反应.. 做你知道如何解决这个问题吗?我添加了一张关于页面 HTML 代码的图片谢谢!
  • 我认为 K.Dᴀᴠɪs 的编辑答案是正确的。但是代码有一个小错误,("td")后面的数字是错误的。你可以使用这个:doc.querySelector("#divPage > table.advancedSearch_table > tbody"). _ getElementsByTagName("tr")(3).getElementsByTagName("td")(5).Children(0).Click。我在我这边试了一下,效果很好。
  • 我这边还是不行...请检查上面的更新(我添加了网站页面整体设计的图片)谢谢!
  • 我认为链接会更有用。可以提供网页链接,方便我们做测试。
【解决方案2】:

<tr> 标签是行,<td> 标签是这些行内的单元格。您没有提供足够的代码来显示整个表格,但一般来说,要访问表格的第一行,您需要引用集合对象并使用所需的索引号。

.getElementsByTagName("tr")(0)

这将引用表格的第一行。与获取表的第一行中的第一列 相同:

.getElementsByTagName("tr")(0).getElementsByTagName("td")(0)

一旦您找到了特定的单元格,现在您想要点击该链接。您可以使用与上述相同的方法。

.getElementsByTagName("tr")(0).getElementsByTagName("td")(0).getElementsByTagName("a")(0).Click

最后一点,表格的第一行可能是标题,因此您实际上可能想要第二行 (1)


感谢您更新更多 HTML 代码。我打算稍微换个档次,用querySelector()抢主桌。

doc.querySelector("#divPage > table.advancedSearch_table > tbody"). _
            getElementsByTagName("tr")(3).getElementsByTagName("td")(3).Children(0).Click

看看这是否适合你。

【讨论】:

  • 感谢您的帮助。我尝试将您的代码输入为: ie3.getElementsByClassName("main_table_data advancedSearch_results_table gray_background").getElementsByTagName("td")(1).getElementsByTagName("a")(1).Click 当我运行代码时没有任何反应.. Do你知道如何解决这个问题吗?我添加了一张关于页面 HTML 代码的图片谢谢!
  • 不会是ie3.Document.getElements...吗?
  • @K.Davis 否,因为 ie3 设置为 Set ie3 = objShell3.Windows(x).document
  • 它仍然无法正常工作...@K.Davis 当我运行您使用 querySelector 提供的新代码时没有任何反应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2022-08-12
相关资源
最近更新 更多