【问题标题】:How to wait for the page to load after click点击后如何等待页面加载
【发布时间】:2017-11-23 12:01:35
【问题描述】:

下面是简单的 IE 自动化代码,只需输入订单号,如 1413105088 和邮政编码,始终为 78759,然后点击提交按钮,然后从结果页面获取跟踪号,如 017136295201034 并将它们放在 C 列中。

它按预期工作,但由于 IE 不是那么可靠和缓慢,我想知道是否有更快的方法来执行此过程,如果没有,我可以使其至少可靠,以便在单击提交后它不会失败按钮,意思是

   Do While IE.Busy Or IE.ReadyState <> 4
        DoEvents
    Loop

之后

        .document.getElementsByClassName("button_text")(3).Click

失败,因为它并没有真正检查 ie 页面是否已完成加载。

我问这个是因为我必须为 100 个这样的请求做这个。提前致谢。

完整代码:

Sub test()

Dim urL As String, orderNum As String
Dim trackingNum, prodDetail, cet
Dim i As Long, fI As Long
Dim IE

urL = "https://fisher-price.mattel.com/webapp/wcs/stores/servlet/OrderStatusGuestView?catalogId=10101&langId=-1&storeId=10151&krypto=prThs8zyeWG0bkF9ajSr%2FCnzmv1TKodtTEw0EdXtC7NjEmfD3cb6Z75umdkcXCiEPFxvkd0TfHkOswm3ZcMp8sbrU2doZFa6TxVbI%2BW1Lzk%3D"

fI = MAIN.Range("B" & Rows.Count).End(xlUp).Row

Set IE = CreateObject("InternetExplorer.Application")

With IE
    .Visible = True

For i = 2 To fI

    orderNum = Trim(MAIN.Range("B" & i).Value)        'Sample ordernum = 1413105088

    If orderNum <> "" Then
        .navigate urL

        Do While IE.Busy Or IE.ReadyState <> 4
            DoEvents
        Loop

        .document.getelementbyid("orderNumber").Value = orderNum
        .document.getelementbyid("postalCode").Value = 78759
        .document.getElementsByClassName("button_text")(3).Click

        Application.Wait Now + TimeValue("00:00:02")
        Do While IE.Busy Or IE.ReadyState <> 4
            DoEvents
        Loop

        prodDetail = .document.getElementsByClassName("productDetails")(0).innerText
        If InStr(prodDetail, "Tracking :") > 0 Then
            cet = Split(prodDetail, "Tracking :")
            trackingNum = Trim(cet(1))
            MAIN.Range("C" & i).Value = trackingNum
        Else
            MAIN.Range("C" & i).Value = "N/A"
        End If

    End If

Next i

End With

IE.Quit
Set IE = Nothing


End Sub

【问题讨论】:

  • 我会将IE.Document.ReadyState &lt;&gt; "complete" 包含在你的循环中以确保它已加载 - 因为你真的在模拟 IE 交互(而不仅仅是抓取),这是我知道的唯一方法跨度>
  • @Jeremy :我不太了解浏览器的工作原理,但我的理解是代码查找浏览器标题或选项卡而不是页面。因此,一旦加载了选项卡或浏览器标题,它就会查找该项目。如果我错了,请纠正我。

标签: vba excel internet-explorer


【解决方案1】:

即使我遇到了Do While... Loop 没有正确加载的问题,所以我使用了下面的代码

x = 0
Do until x = 1
  if IsObject(.document.getelementbyid("orderNumber")) Then
    .document.getelementbyid("orderNumber").Value = orderNum
    .document.getelementbyid("postalCode").Value = 78759
    .document.getElementsByClassName("button_text")(3).Click
    x = 1
  Else
    Application.Wait Now + TimeValue("00:00:02")
  End if
Loop

工作: 由于x=0 它将进入循环并且由于未找到IsObject(.document.getelementbyid("orderNumber")),因此它将等待两秒钟并且循环将继续直到找到订单号,否则它将使值成为x=1 并退出循环.

注意:如果您的代码不起作用,那么此代码将一直运行。您可以为其设置循环限制。

【讨论】:

  • 我正在尝试检查 If IsObject(.document.getElementsByClassName("productDetails")) 是否为真,但我得到了 with or with block not set 的错误
  • 它对我来说很好用。看来您没有正确使用代码。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多