![](/img/trans.png)
[英]How to set the value of first input type text in document's first form using mshtml in C#?
[英]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.dll
的FindWindow()
和FindWindowEx()
來完成。 Windows API中的這些方法用於查找活動窗口和子窗口。
您的實施是否必須涉及使用IE? 使用WebClient
類使用POST請求上傳文件可能更簡單,但這取決於表單是否提供上載的任何其他后期操作。 如果沒有,您可以使用WebClient.UploadFile
。
如果您需要為此表單上傳多個POST值(即新文件名?),請查看此處: WebClient.UploadFile和WebClient.UploadValues在同一個調用中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.