gaiki 2019-09-16 06:18 采纳率: 33.3%
浏览 270
已结题

C# webbrowser键盘模拟输入 Inputpile路径。这个Inputpile是没有输入框的,TAB键不管用,能有什么办法可以填入路径?

有一个页面,页面上嵌套了一个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}");
        }
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-09-16 09:12
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图