×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

我已经解决这个问题了。用的还是比较trick的方法。放弃用webbrowser post的方法了。http的头文件根本不知道如何设置。而且网站的结构也不是很清楚,根本无从下手。试了好几天还是不行。网上也没有比较好的资源可以参考。

本文发表在 rolia.net 枫下论坛上传用的网站是第三方的,asp作的。server的代码是不可能看到的。我没有别的选择。
本来是两个妹妹天天手动上传文件的。可manager非要改成自动的。
不过我已经解决这个问题了。用的还是比较trick的方法。放弃用webbrowser post的方法了。http的头文件根本不知道如何设置。而且网站的结构也不是很清楚,根本无从下手。试了好几天还是不行。网上也没有比较好的资源可以参考。
我这个trick的方法也是自己想出来的。网上有不少类似的方法,可都不好用。我借鉴了一些经验,得到现在这个solution。目前对于这个网站是工作的。因为是模拟键盘操作,所以可能有很大的局限性,还好我用的这个网站不是经常变动和更新。
关键部分只有3行,两三个函数而已。唉花了我3天时间。最后还是谢谢大家的帮助和回复!
我把这部分代码贴出来。注意comments。希望不会造成什么安全隐患。想自己也没那么牛。如果真有这方面的问题,望大家转载,应用时小心些。或请斑竹删除这部分。

webrowser1.Document.GetElementById("upload").Focus()

'Trick Part!!!
'For security reason, MS do not allow to upload file automatically from <input type=file>
'Here, I simulate keyboard action to input the file directory and click the submit button.

'Get focus to input
'Focus() cannot really get the focus on the upload input box. Use Tab key to get focus
SendKeys.Send("{tab 2}")
SendKeys.Send("+{tab 2}")

'Simulate keyboard input
SendKeys.Send("C:\test\www.txt")

'Important part!!!
'The submit button only can be press manually(simulate keyboard to do it)
'If use system function to click the submit button, for example HTTPElement.InvokeMember("click")
'The file cannot be uploaded.
SendKeys.Send("{tab 2}")
SendKeys.Send("{ENTER}")更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 求助 VB.NET 关于 webbrowser 自动上传文件<input type=file>
    头大了。
    现在做一个程序,把文件自动上传到指定网页。
    我用vb.net中webbrowser控件。控制登录啊,选项啊什么的都没问题。可遇见<input type=file>就没招了。知道由于安全考虑,这个控件是不可以赋值和控制的。于是想用 webbrowser.navigate(url,string,buy[],string)这个函数把file post上去。可怎么试也不成功。查了两天google,只找到vb6的一个例子可行。可转到vb.net就是不行。
    谁有经验啊?头大死了!最好有个实例可以参考就好了。
    万分感谢。
    • 这个东西要用类似httprequest 类做。 另一种方法是动态生成html,javascrip,然后用webbrowser控件打开,不过没第一种好。
    • You already know the answer, this is not possible for security reason.
      • +1
    • 我已经解决这个问题了。用的还是比较trick的方法。放弃用webbrowser post的方法了。http的头文件根本不知道如何设置。而且网站的结构也不是很清楚,根本无从下手。试了好几天还是不行。网上也没有比较好的资源可以参考。
      本文发表在 rolia.net 枫下论坛上传用的网站是第三方的,asp作的。server的代码是不可能看到的。我没有别的选择。
      本来是两个妹妹天天手动上传文件的。可manager非要改成自动的。
      不过我已经解决这个问题了。用的还是比较trick的方法。放弃用webbrowser post的方法了。http的头文件根本不知道如何设置。而且网站的结构也不是很清楚,根本无从下手。试了好几天还是不行。网上也没有比较好的资源可以参考。
      我这个trick的方法也是自己想出来的。网上有不少类似的方法,可都不好用。我借鉴了一些经验,得到现在这个solution。目前对于这个网站是工作的。因为是模拟键盘操作,所以可能有很大的局限性,还好我用的这个网站不是经常变动和更新。
      关键部分只有3行,两三个函数而已。唉花了我3天时间。最后还是谢谢大家的帮助和回复!
      我把这部分代码贴出来。注意comments。希望不会造成什么安全隐患。想自己也没那么牛。如果真有这方面的问题,望大家转载,应用时小心些。或请斑竹删除这部分。

      webrowser1.Document.GetElementById("upload").Focus()

      'Trick Part!!!
      'For security reason, MS do not allow to upload file automatically from <input type=file>
      'Here, I simulate keyboard action to input the file directory and click the submit button.

      'Get focus to input
      'Focus() cannot really get the focus on the upload input box. Use Tab key to get focus
      SendKeys.Send("{tab 2}")
      SendKeys.Send("+{tab 2}")

      'Simulate keyboard input
      SendKeys.Send("C:\test\www.txt")

      'Important part!!!
      'The submit button only can be press manually(simulate keyboard to do it)
      'If use system function to click the submit button, for example HTTPElement.InvokeMember("click")
      'The file cannot be uploaded.
      SendKeys.Send("{tab 2}")
      SendKeys.Send("{ENTER}")更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • 我用的stellacui是gasgas的马甲。最后还是谢谢大家的回复。
      • Did you try WebClient's UploadFile(urlString, filePath)?