gpt4 book ai didi

html - 使用 VBA 导航网页/通过 Access 操作 IE

转载 作者:太空狗 更新时间:2023-10-29 16:35:53 25 4
gpt4 key购买 nike

你好 StackOverflow 社区,

我有一个关于使用 Access VBA 操作 IE 的问题。

本质上,我正在尝试编写将使用 IE 打开特定网页的代码,在该页面中搜索特定链接(目标链接的名称将取决于用户的情况),导航到新页面以编程方式单击该链接,然后通过在生成的新页面上查找特定链接/元素来重复该过程。

最终目标链接的显示文本始终相同,但它所在的页面在每种情况下都不同。

我的问题是通过编程方式在二级页面中搜索驻留在那里的元素...我的结果一直只给我一级页面中的元素,即使在浏览器加载了新链接之后也是如此。

如果到目前为止我在描述问题的背景方面做得不好,我们深表歉意。

我的代码基本上如下:

Dim ie As Object, ieDoc As HTMLDocument

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True

strHTML = "http://targetsite.com/first-level_page"

ie.navigate strHTML

'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend


'define first-level target link and search for it and then "click" it

Dim i As Integer
Dim txt As String, link As String, p As String

Set ieDoc = ie.Document

txt = "First-Level Target"
Do Until link = txt Or i >= 1000
i = i + 1
link = ieDoc.Links(i).outerText
Loop

'I know the above loop is not exactly ideal in its current form, but it does give me a working first attempt at the functionality I'm trying to build.

ieDoc.Links(i).Click

到目前为止,还不错。上面的代码按预期工作。在所有情况下,它都能正确导航到所需的二级页面。我出错的地方是当我尝试在二级页面中搜索最终目标元素时:

'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend

'Search for final target element (which always has the same name and anchor text on all second-level pages)
ieDoc.getElementsByName("final-target-name").Item.Click

如果我尝试在第一级页面上使用上面的行(基于 .getElementsByName),它就可以正常工作。但是一旦我导航到任何二级页面,它就什么都不做。我还尝试用上面循环的修改版本替换它,该循环在第一级页面上搜索链接。相同的结果。

作为故障排除步骤,我还用 debug.print 命令替换了该行,以简单地命名二级页面上的所有元素,并且它总是返回第一页中的元素名称。

我假设很明显,在我点击第一个链接后,我无法正确更新或重新定义我的 HTML 文档。我已将 ieDoc 设置为空,然后将其重新设置为 ie.document,但这也不起作用。

希望有一个我根本不知道的简单命令或语法。但是对于我来说,在单击第一个链接后,我无法让 VBA 正确引用页面上存在的 HTML 元素。

提前感谢您的任何建议!

~JQN

最佳答案

您需要结合使用@Matteo NNZ 和@TimWilliams

如果您知道元素的“id”名称,使用 getElementsByName("target") 会更容易。

如果您不知道“id”,则循环定位元素并搜索正确的文本。这缩小到只有链接或元素。

Set Anchors = IeDoc.getElementsByTagName("a")

然后循环比较 .outertext 或您需要的任何子字段。

@蒂姆威廉姆斯:您需要加载找到的 URL,然后在循环内设置新加载的 IeDoc。将“ie”对象设置为新的“ie”加载页面,否则“ie”对象将正确地保持第一个加载页面。当您找到您的链接时,您需要加载新页面,就像您已经完成的那样。

'' throw away the first page loaded.
ie = nothing
IeDoc = nothing

'' Set the new page loaded.
ie.navigate newHTML

'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend

Set IeDoc = ie.Document

第二页重复上述过程

以下是关于“在 vba 中解析 HTML”的一些其他资源: http://www.ozgrid.com/forum/showthread.php?t=184695 Parse HTML content in VBA

关于html - 使用 VBA 导航网页/通过 Access 操作 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com