有一个页面,页面上嵌套了一个form代码如下
/*前面代码省略*/
<div>
<form action="https://supplier.netsea.jp/csv_exhibit/confirm" method="POST" enctype="multipart/form-data">
<input type="hidden" name="_token" value="xswwuhHYlYTE0do4M6aSjKdrxP0NEDMk9hUGZaxa">
<p class="tC">
<label for="uploadCsvFile" class="fileInputLabel"><input type="file" name="csv_file" id="uploadCsvFile">选择文件</label><span class="inputFileName block topMgnSeth">你还没有选者文件</span>
</p>
<div class="w30per blockC topMgnSet4 btmMgnSet6">
<button class="btnType01 btnColor02 btnEffects" type="submit">上传</button>
</div>
</form>
</div>
//cs代码
void up_file(object sender, WebBrowserDocumentCompletedEventArgs e)//模拟登陆后操作文件上传
{
HtmlElement hel = webBrowser1.Document.GetElementById("uploadCsvFile");
hel.Focus();
hel.InvokeMember("click");//这里可以捕获焦点,弹出选择文件框
//到这里的时候输入框的光标已经在指定位置,输入路径的地方。于是执行下面的操作
string file = "C:\\Users\\Administrator\\Desktop\\1.csv";
//SendKeys.SendWait("{TAB}");这里找不到“uploadCsvFile”,不用Webbrowser直接在IE浏览器里按TAB键也找不到焦点,这个方法排除。
//SendKeys.Send(file);这个方法也是在弹出的对话框里无法填写路径
}
//在网上找了下面的方法,因为TAB键找不到焦点也不行,这个文件传上去还要点击确认按钮才能上传成功,大家帮帮忙想想办法
void up_file(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement hel = webBrowser1.Document.GetElementById("uploadCsvFile");
hel.Focus();
SendKeys.SendWait("{TAB}");
SendKeys.SendWait(" ");
DelayFillFileChooseDialog(file);
}
void DelayFillFileChooseDialog(string file)
{
BackgroundWorker b = new BackgroundWorker();
b.RunWorkerCompleted += new RunWorkerCompletedEventHandler(b_RunWorkerCompleted);
b.DoWork += new DoWorkEventHandler(b_DoWork);
b.RunWorkerAsync(file);
}
void b_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1000);
e.Result = e.Argument;
}
void b_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
SendKeys.Send(e.Result as string);
SendKeys.Send("{Enter}");
}