首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从IE下载文件的宏丢失或跳过

从IE下载文件的宏丢失或跳过
EN

Stack Overflow用户
提问于 2019-09-17 12:52:07
回答 1查看 27关注 0票数 0

我正在使用下面的代码从网站下载文件。虽然它不会给出任何错误,但它丢失了一些文件(所有文件都标记为已下载)。我在excel表中有标准,这是放在网站的一个字段和文件下载(在excel中标记为已下载)。

代码语言:javascript
运行
复制
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```
EN

回答 1

Stack Overflow用户

发布于 2019-09-17 17:12:47

我猜单击按钮时.ReadyState.Busy属性保持不变。如果是这种情况,那么您实际上并不是在等待完成此操作,这就是它缺少一些文件(除了第一个文件)的原因。去过那里,做过这些。

您需要找到一种方法来等待,直到您可以下载下一个文件。我看到两个选项(硬编码延迟除外):

  1. 如果网站告诉你文件正在下载,在特定元素更新时循环,例如可能有一个正在下载的图标,或者显示了“正在下载”文本,有什么问题吗?如果你不确定,在点击之前和之后获得"body“innerText,并在点击前比较下载文件夹中的
  2. count文件,然后等到点击后计数更大-是的,这不是理想的选择,但它是一个选项

另外,我只想指出:

  • 我不确定Do While iecount <> xx是做什么的,但我会摆脱它,因为它可能是非常不准确的
  • 而不是继续复制While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend,使它成为一个函数,它会让你的生活更简单,代码更整洁-你可以添加可选参数,一个必须出现在body的innerText中的字符串(如上所述,将IE设置为nothing,但浏览器保持打开,除非需要,否则您可以添加IE.quit first
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57967537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档