كيفية الكتابة إلى حقل إدخال من نوع الملف في صفحة ويب برمجياً من تطبيق c# windows باستخدام mshtml؟

StackOverflow https://stackoverflow.com/questions/1872583

  •  18-09-2019
  •  | 
  •  

سؤال

لدي مشروع تطبيق c# windows والذي يجب عليه فتح IE، والانتقال إلى موقع ويب، وتسجيل الدخول، ثم تحميل بعض الملفات.

لقد استخدمت مكتبات shDocvW وmshtml للقيام بذلك.أنا قادر على فتح IE، والانتقال إلى موقع الويب وتسجيل الدخول ولكن لا أستطيع تحميل الملفات.

أنا قادر على الانتقال إلى موقع الويب ثم إضافة قيمة نصية إلى حقول الإدخال (هذا حقل إدخال من النوع "نص") على موقع الويب باستخدام -

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

لقد تمكنت أيضًا بالمثل من إضافة قيمة نصية إلى حقل الإدخال من النوع "كلمة المرور".بعد أن قمت بتسجيل الدخول إلى الموقع، لا بد لي من تحميل ملف.

المشكلة التي أواجهها هي أنني غير قادر على إضافة المسار (سلسلة) إلى حقل الإدخال من النوع "ملف".

أنا غير قادر على إيجاد أي حلول.

هل كانت مفيدة؟

المحلول

جربت العديد من الطرق للقيام بذلك، لكن لم يكن من الممكن لأن IE8 جعلت خاصية القيمة للقراءة فقط لأسباب أمنية فقط.

حسنا، لقد وجدت عمل حولها. انها بسيطة جدا ولكن استخدام 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 أمر. يمكن القيام بذلك باستخدام FindWindow() و FindWindowEx() من user32.dll. وبعد تستخدم هذه الأساليب في واجهة برمجة تطبيقات Windows للعثور على النافذة النشطة ويندوز الطفل.

نصائح أخرى

هل يجب أن يتضمن التنفيذ الخاص بك استخدام IE؟قد يكون هذا أسهل باستخدام WebClient class لتحميل الملف باستخدام طلب POST، ولكن هذا يعتمد على ما إذا كان النموذج يوفر أي إجراءات نشر أخرى مع التحميل.إذا لم يكن الأمر كذلك، يمكنك استخدام WebClient.UploadFile.

إذا كنت بحاجة إلى تحميل قيم POST متعددة لهذا النموذج (على سبيل المثال،اسم الملف الجديد؟)، ألقِ نظرة هنا: WebClient.UploadFile وWebClient.UploadValues ​​في نفس المكالمة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top