【问题标题】:Object htmldivelement doesn't click on IE11对象 htmldivelement 不点击 IE11
【发布时间】:2019-07-07 10:38:27
【问题描述】:

将进入学校页面并单击“赞”按钮。我要去页面对象htmldivelement 功能没有点击按钮。我的命令在 IE10 上运行,但它不适用于 IE11。

Set hIE = CreateObject("InternetExplorer.Application")   
hURL = "http://mukerremalikayanilkokulu.meb.k12.tr/icerikler/eglen-dusun-bul_6506730.html"

With hIE
    .Navigate hURL
    .Visible = True

    Do While hIE.Busy
    Loop
End With

Set haberss = hIE.document.getElementsByClassName("begen")
For Each haberbb In haberss
    If haberbb = "begen" Then
        Do While hIE.Busy
        Loop
        haberbb.Click
        Set hIE = hIE.Quit
        Exit For
    Else
        Do While hIE.Busy
        Loop
        haberbb.Click
        Set hIE = hIE.Quit
        Exit For
    End If

haberbb 按钮在 IE10 上有效,但在 IE11 上无效。

【问题讨论】:

  • 请注意,您的 If 声明 If haberbb = "begen" Then 没有任何意义。它在Then 上运行与Else 上完全相同的代码!
  • 感谢您的回答。我知道我的错误。但我这样做是为了看看他们点击的是正面还是负面。

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


【解决方案1】:

我不知道这是否有效或需要某种形式的登录。我不能手动点赞。

这里有3种编码方式:

Ie.document.querySelector(".begen").click

Ie.document.querySelector(".begen").FireEvent "OnClick"

Ie.document.parentWindow.execScript "document.querySelector('.begen').click;"

Option Explicit
Public Sub AttemptClick()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "http://mukerremalikayanilkokulu.meb.k12.tr/icerikler/eglen-dusun-bul_6506730.html"
        While .Busy Or .readyState < 4: DoEvents: Wend
        .document.querySelector(".begen").FireEvent "onclick"
        .document.querySelector(".begen").Click
        .document.parentWindow.execScript "document.querySelector('.begen').click();"
        Stop
        .Quit
    End With
End Sub

【讨论】:

  • 感谢@Pᴇʜ
  • 感谢您的回答。我会尽快通知您
  • 我尝试点击like按钮,我可以手动点击它,然后我尝试运行@QHarr代码,发现它也适用于我的IE 11。这是测试结果. i.postimg.cc/gJyYJMcS/45.gif
  • 谢谢。 “querySelector”解决了我的问题。感谢您学习新知识。再次感谢。
  • 亲爱的 Qharr,当我点击按钮时,他们的“赞”增加了。我想要做的是点击时增加10。有没有办法做到这一点?
【解决方案2】:

除了 QHarr 的回答之外,您的 Do While...Loop 也不太正确。

  1. 您应该在循环中执行一些操作,否则您只会使 CPU 使用率达到峰值。您至少应该在两者之间添加一个DoEvents 以允许窗口处理其他程序/消息。
  2. 您似乎不是在等待页面加载完成。尝试将Or ReadyState &lt; READYSTATE_COMPLETE 添加到循环条件中。

把它放在一起,循环应该是这样的:

Do While IE.Busy Or IE.ReadyState < READYSTATE_COMPLETE ' = 4
    DoEvents
Loop

以下是一些可能有帮助的其他参考资料:

Failproof Wait for IE to load

How to wait for the page to load after click

【讨论】:

  • 感谢您的回答。我会尽快通知您
  • Application.Wait (Now + TimeValue("0:00:04")) 这个命令我觉得还是希望
  • 我听说“就绪状态”在“i11”上不起作用。它实际上改变了。 :) 工作得很好。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
相关资源
最近更新 更多