- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你好 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/
我是网页设计新手。现在我遇到了我目前工作的 2 个网站的问题。我的模板只支持 Firefox 浏览器,不支持其他主流浏览器,如 IE、chrome、Opera、safari。 我试过一些 If IE
在我的 HTML 上,使用了下面的元标记来解决一些字体问题。我只想知道: 这两个元标记的含义相同吗?还是每一个都不一样? [以逗号分隔] [以分号分隔] 请解释一下。 最佳答案 Microsoft
这句话究竟是什么意思? 部分示例使用 ,分隔 IE 的版本,而有些使用 ; ;哪个是正确的? 订单IE=9; IE=8; IE=7; IE=EDGE有一些重要性,我想知道。 编辑:我正在使用 最佳答
这句话究竟是什么意思? 一些示例使用 ,分隔 IE 的版本,而有些使用 ; ;哪个是正确的? 订单IE=9; IE=8; IE=7; IE=EDGE有一定的重要性,我想知道。 编辑:我正在使用 最佳
在 IE 8 中,我们可以带出开发者工具。然后在顶部,有一个浏览器模式: IE 7 IE 8 IE 8 Compatibility View 所以如果 IE 7是强制页面显示为好像浏览器是 IE 7,
我认为不需要任何描述。我只需要我的 IE 11 单选按钮与 IE 8 中的一样,即颜色为 3-d 蓝色。在 IE 11 中,默认单选按钮是二维的,颜色为黑色。目前还没有解决这个问题。 最佳答案 检查这
我必须编写一个显示密码对话框的小程序。问题是对话框设置为始终在顶部,但是当用户单击 IE 窗口时,对话框仍然隐藏在 IE 窗口后面。并且由于对话框是模态的并且保持全部 IE 线程 IE Pane 不会
如何制作适用于所有 IE 浏览器的样式表。不只是 ie.css 中的 IE 8 本站主题的ie.css文件中只包含IE8样式。 最佳答案 他们这样做的原因是因为他们可能不支持 Internet Exp
使用有什么区别吗 ... 或者 ... ? 最佳答案 如果一种罕见的、神话般的浏览器被称为 ,就会有所不同。 Internet Explorer 6.66 被发现。 关于internet-explor
我试图在 IE7+8 中使用字体图标并遇到了一个问题,这个问题可以通过仅 IE7 的样式表轻松解决。长话短说,现在 IE7 和 IE9 都以某种方式运行我的仅 IE7 样式表(IE8 运行得很好)。我
我实现了上传的图片显示在网站上。为了 图片未正确上传意味着我将错误图片替换为 那?当我加载网站时,我遇到了 错误图像不存在的问题 定义,并且灯箱在 chrome 和 firefox 中加载 但它没有在
我有一个特殊的问题。我正在尝试“现代化”和为旧 IE 制作的旧应用程序,以便在 IE 11 中工作。但不知何故,CSS 类没有应用于 DOM 元素。 CSS 非常简单: .header { h
对于 IE 7 和 IE 8,IE 上 URL 的 2k 长度限制是否仍然存在? (后 IE 6 时代) 最佳答案 http://support.microsoft.com/kb/208427 似乎它
我们正在完善这个网站:dev.underglassframing.com 除了主要内容 div (#main) 后面的背景在 IE 7、8 和 9 中的内容之前停止外,在每个浏览器中一切都很好。我在末
我在 IE 11 中搜索过与 border-radius 相关的类似问题,但是 only one found on the Microsoft IE Developer site描述了自从“升级”到
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit th
这个问题在这里已经有了答案: (CSS?) Eliminating browser's 'selected' lines around a hyperlinked image? (5 个答案) 关闭
我知道有 1000 个问题,但我就是无法让它发挥作用。我只是想针对所有版本的 IE(包括 IE11)并给 html 一个特定的类,对于所有其他浏览器(firefox、opera、chrome),我希望
我有一个嵌入了 Internet Explorer 的程序。 在某些情况下,我需要调整嵌入式 IE 的缩放级别。我正在使用带有 OLECMDID_OPTICAL_ZOOM 的 ExecWB 命令来执行
我正在开发一个网络应用程序。我的应用程序在 chrome 和 firefox 上运行良好,但由于某种原因在 IE 中出现了一些错误。即使出现几个错误,应用程序仍然可以顺利运行,没有明显的问题。 我想对
我是一名优秀的程序员,十分优秀!