我正在使用下面的代码从网站下载文件。虽然它不会给出任何错误,但它丢失了一些文件(所有文件都标记为已下载)。我在excel表中有标准,这是放在网站的一个字段和文件下载(在excel中标记为已下载)。
Dim time1, time2
Dim ie As Object
        CreateObject("Shell.Application").Windows
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = True
          ie.Navigate "websitelink"
          While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
          ie.Document.getElementById("txtLogin").Value = "username"
          ie.Document.getElementById("txtPassword").Value = "password"
          ie.Document.getElementById("imgbtnLogin").Click
          While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
          ie.Document.getElementById("ctl00_LeftMenu1_lstLeftMenuList_ctl02_lnkItem").Click
          While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
          ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaMainUc1_dgSubject_ctl02_btnProcess").Click
          While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
          ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaDetailUc1_dgReporting_ctl04_lnkbtnReport").Click
          While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
ie.Visible = True
Set objshell = CreateObject("Shell.Application")
iecount = objshell.Windows.Count
NROW = 2
ROW_FLAG = Sheet1.Cells(NROW, 1).Value
Do While ROW_FLAG <> ""
        ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaDetailUc1_MISEFEWiseData_txtExportNTN").Value = Sheet1.Cells(NROW, 1).Value
        ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaDetailUc1_MISEFEWiseData_txtDateFrom_txtDate").innerText = Sheet1.Cells(2, 5)
        ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaDetailUc1_MISEFEWiseData_txtDateTo_txtDate").innerText = Sheet1.Cells(3, 5)
        ie.Document.getElementById("ctl00_ContentPlaceHolder2_SubjectAreaDetailUc1_MISEFEWiseData_btnReport").Click
        Sheet1.Cells(NROW, 3).Value = "Downloaded"
        While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
'time1 = Now
'time2 = Now + TimeValue("0:01:00")
'    Do Until time1 >= time2
'        DoEvents
'        time1 = Now()
'    Loop
    NROW = NROW + 1
    ROW_FLAG = Sheet1.Cells(NROW, 1).Value
    Do While iecount <> xx
    xx = objshell.Windows.Count
    Loop
Loop
    While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend
      Set ie = Nothing
MsgBox Sheet1.Cells(1, 1) & Sheet1.Cells(1, 5)
End Sub```发布于 2019-09-17 17:12:47
我猜单击按钮时.ReadyState或.Busy属性保持不变。如果是这种情况,那么您实际上并不是在等待完成此操作,这就是它缺少一些文件(除了第一个文件)的原因。去过那里,做过这些。
您需要找到一种方法来等待,直到您可以下载下一个文件。我看到两个选项(硬编码延迟除外):
另外,我只想指出:
Do While iecount <> xx是做什么的,但我会摆脱它,因为它可能是非常不准确的While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend,使它成为一个函数,它会让你的生活更简单,代码更整洁-你可以添加可选参数,一个必须出现在body的innerText中的字符串(如上所述,将IE设置为nothing,但浏览器保持打开,除非需要,否则您可以添加IE.quit firsthttps://stackoverflow.com/questions/57967537
复制相似问题