簡體   English   中英

如何使用mshtml從c#windows app以編程方式在網頁中寫入文件類型的輸入字段?

[英]How to write to a input field of type file in a web page programatically from a c# windows app using mshtml?

我有一個ac#windows app項目,它必須打開IE,導航到一個網站,登錄然后上傳一些文件。

我使用shDocvW和mshtml庫來做到這一點。 我可以打開IE瀏覽器,導航到網站並登錄但無法上傳文件。

我可以導航到網站,然后在網站上使用以下方法將文本值添加到輸入字段(這是“text”類型的輸入字段)中 -

HTMLInputElement txtbox1 =(HTMLInputElement)oDoc.all.item("login", 0);
txtbox1.value = "Login_name";

我也同樣能夠在“password”類型的輸入字段中添加文本值。 登錄網站后,我必須上傳文件。

我面臨的問題是我無法將路徑(字符串)添加到“file”類型的輸入字段中。

我無法找到任何解決方案。

我嘗試了很多方法來做到這一點,但這是不可能的,因為出於安全原因,IE8將Value屬性設置為只讀。

好吧,我確實找到了解決方法。 它非常簡單,但使用SendKeys並不總是被認為是最好的編程解決方案。 但是,它完成了這項工作。

oBrowser.Navigate("http://www.some-url.com", ref oNull, ref oNull, ref oNull, ref oNull);        

while (oBrowser.Busy)   
{
    System.Threading.Thread.Sleep(20);
}

//Locate the Input element of type="file"
HTMLInputElement file_1 = (HTMLInputElement)oDoc.all.item("file_1", 0);
file_1.select();        

SendKeys.Send("{TAB}");   //Navigate to the Browse button
SendKeys.Send(" ");       //Click on the browse button

SendKeys.Send(@"c:\Test.txt");         //File Path
SendKeys.Send("{TAB}");
SendKeys.Send("{ENTER}");

可以通過檢查活動窗口並在每個SendKeys命令之前設置正確的窗口來改進此代碼。 這可以通過使用user32.dllFindWindow()FindWindowEx()來完成。 Windows API中的這些方法用於查找活動窗口和子窗口。

您的實施是否必須涉及使用IE? 使用WebClient類使用POST請求上傳文件可能更簡單,但這取決於表單是否提供上載的任何其他后期操作。 如果沒有,您可以使用WebClient.UploadFile

如果您需要為此表單上傳多個POST值(即新文件名?),請查看此處: WebClient.UploadFile和WebClient.UploadValues在同一個調用中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM