【问题标题】:Upload a file to a website programmatically?以编程方式将文件上传到网站?
【发布时间】:2013-11-03 22:08:19
【问题描述】:

我正在使用 Lazarus 我有一个带有 webbrowser 组件的应用程序,它登录到网站会加载如下页面(请参阅下面的 html 代码),并填写不同的输入。最后一个输入是要上传的文件。我希望我的应用程序“单击”浏览,选择我想要的文件,然后打开。之后我可以发布表单或上传文件并继续。

1

我在网站上有以下 html 代码:

<td align="left" class="RequiredInput">File:</td>
<td class="datafield">
 <form name="frmMain" id="frmMain" action="upload.asp?step=2&output=1" method="post" enctype="multipart/form-data">
    <input type="file" name="filename" id="filename">
</form>

我尝试从我的应用程序中执行 JS:document.getElementById('filename').value = 'C:\x.csv'

2

我尝试使用 synapse 中的以下代码 HttpPostFile

uFileName := 'C:\x.csv';
uStream := TFileStream.Create(uFileName, fmOpenRead);
uList:=TStringList.Create;  
if HttpPostFile('upload.asp?step=2&output=1', 'filename', uFileName, uStream, uList) then
 ShowMessage('OK');   

它什么也没做(我用 Fiddler 跟踪了应用程序的活动)

任何帮助将不胜感激。

提前致谢,

Zsolt

【问题讨论】:

  • not working 不是一个很好的取证术语。查看错误、检查网络选项卡中的请求等时,浏览器控制台中发生了什么。
  • not working = 'filename' 字段没有得到更新...不确定我应该检查网站的浏览器控制台只能在 IE 中使用。我正在使用 TWebBrowser 组件。
  • ie 有一个开发者工具控制台-键盘上的 F12
  • 谢谢你,但不知道这对我有什么帮助。我也找不到“网络标签”。我正在尝试从用 Lazarus 编写的应用程序中自动化表单,我正在使用 Fiddler 来查看发生了什么。
  • 这是两个完全不同的问题(一个关于 HTML/JavaScript,另一个关于 Lazarus/Synapse)。它们需要单独发布,每个问题都带有适当的标签。这个网站是围绕“一个问题,一个答案”设计的,而不是“把一堆不相关的问题放在一起,然后要求他们全部回答”。 :) 请edit 删除一个问题及其相关标签,并在新帖子中询问已删除的问题。谢谢。

标签: webbrowser-control lazarus twebbrowser


【解决方案1】:

这是一个已知问题,有一个 solution,但您必须将其从 С# 转换为 Delphi。

另一种可能的解决方案是使用URL Moniker APIs 上传文件。然后上传将在同一会话上进行,WebBrowser 控件已在使用。有一篇 MSKB 文章:

How To Handle POST Requests in a Pluggable Protocol Handler

与文章链接的POSTMON.EXE 示例已从微软网站上消失,但仍可在here 找到。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多