【问题标题】:VBA Click on dynamic generated div with IDVBA单击带有ID的动态生成的div
【发布时间】:2016-06-23 21:38:32
【问题描述】:

我遇到了这种情况,我一直在努力解决,但没有任何运气。我在 Excel 中使用 VBA 导航到网站。在这个网站上,我使用 VBA 单击 id 为 id-01 的 div,效果很好。点击那个div#id-01会生成另一个id为id-02的div,我想点击这个div。如何使用 VBA 点击带有id-02 的 div?

Set IE = CreateObject("InternetExplorer.Application")
'
'code to navigate to site and wait for site to load
'

'Get div#id-01 and click on it
Set first = IE.document.getElementById("id-01")

'click it
first.click

'The following code does not work because
Set second = IE.document.getElementById("id-02")

second.click

【问题讨论】:

  • 也许你可以使用tag name来代替元素ID?似乎这应该作为 id-01 的“孩子”来处理,而不是仅仅点击 id-01 然后 id-02
  • 页面渲染完成后,在我点击div#id-01之前,没有div#id-02。我想,您将div#id-01 称为div#id-01 的子代或将其作为目标将没有什么不同,因为对象ID.document 不会更新div#id-02 的存在,如果对象知道id- 02,上面的代码应该可以工作了。
  • 可能重复此:stackoverflow.com/questions/11820548/…。建议将Application.Wait Now + TimeSerial(0,0,x) 置于first.clickSet second = ... 之间,其中x 是一些秒数。
  • @Robin,感谢您向我指出资源,不,情况不同。第二个 div 是在用户交互时生成的,而不是在页面加载完成之前生成的。问题不同。
  • 您是否尝试过在 ie.busy 或未准备好时循环播放?

标签: vba excel internet-explorer-9


【解决方案1】:

我通常在第一个添加新元素后重置文档。

试试这个:

   Set IE = CreateObject("InternetExplorer.Application")

    '
    'code to navigate to site and wait for site to load
    '
    set myDoc = IE.Document

    Set first = myDoc.getElementById("id-01")

    'click it
    first.click


    (WAIT 2 seconds)

    set myDoc = IE.Document

    Set second = IE.document.getElementById("id-02")

    second.click[/code]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2013-02-28
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多