如何在VB中编写自动下载代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在VB中编写自动下载代码?相关的知识,希望对你有一定的参考价值。

现在我正在尝试编写一个能够从特定网站下载文件的工具,除了其他一些东西。

我目前的解决方案是,我打开网站,从Internet Explorer中下载文件,等待几秒钟,以便可以加载网站,然后发送一个按键到Internet Explorer,即ALT + S,将文件保存到标准下载位置。

但是,我的代码在应该发送击键的行中失败。你会发现它当然低于它抛出的错误。


我相信你会发现一些有用的事实:

  • 我的应用程序将是一个控制台应用程序,没有表单应用
  • 我正在使用Internet Explorer,因此我可以确定该应用程序适用于每台Windows PC
  • 我希望Internet Explorer具有默认配置,用于下载要设置为“用户提示”的文件,即它询问是否应该打开或保存文件
  • 您将在下面的代码中看到该网站是第三方网站,因此我无法直接访问服务器上托管的文件

我特别想知道的是:

  • 我能以某种方式更智能地解决这个问题吗?下载文件还有其他比我更简单的方法吗?
  • 如何让我的应用程序等待加载网站,甚至等待“打开 - 保存 - 取消”提示出现?
  • 如何让“SendKeys”部分正常工作?

最重要的是:请注意,我是一个业余爱好程序员,几周前刚刚开始使用VB。如果我错过了一些重要信息或我的代码看起来很奇怪,那么这就是为什么:)


Sub Download()

    Dim IE As Object
    IE = CreateObject("InternetExplorer.Application")

    Console.WriteLine("Start Download")
    IE.Navigate("https://toolslib.net/downloads/finish/1-adwcleaner/") 'Opens the website in Internet Explorer
    Do 'Waits for Internet Explorer to be launched before going on
        If CBool(Process.GetProcesses.Where(Function(P As Process) _ 
                 P.ProcessName = "iexplore").Count) Then
            Exit Do
        End If
        Threading.Thread.Sleep(100)
    Loop
    IE.Visible = True

    Threading.Thread.Sleep(5000) 'Some time for the website to load
    IE.SendKeys("%{S}", True)

End Sub

运行此代码时,它会引发以下错误。

Note: Line 67 is the line where IE.SendKeys("%{S}", True) stands.

Unhandled Exception: System.ArgumentException: The process {0} wasn't found.
   at Microsoft.VisualBasic.CompilerServices.Symbols.Container.InvokeMethod(Method TargetProcedure, Object[] Arguments, Boolean[] CopyBack, BindingFlags Flags)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.CallMethod(Container BaseReference, String MethodName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, BindingFlags InvocationFlags, Boolean ReportErrors, ResolutionFailure& Failure)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn)
   bei Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn)
   at MyApp.Module1.Download() in C:UsersUserDocumentsVisual Studio 2017ProjectsMyAppMyAppModule1.vb:Line 67.
答案

我在表单应用程序中使用了WebBrowser控件,它工作得很好!

                SendKeys.Send("+{TAB}")
                System.Threading.Thread.Sleep(1000)
                SendKeys.Send("{ENTER}")

以上是关于如何在VB中编写自动下载代码?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Prompt7.2下载及破解教程

如何在 Vs Code 中更改默认自动选择的用户片段行为

创建自己的代码片段(CodeSnippet)

如何通过 VB.NET 自动关闭网站上的覆盖?

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段