سؤال

أحتاج إلى أتمتة عملية تتضمن موقع ويب يستخدم نموذج تسجيل الدخول.أحتاج إلى التقاط بعض البيانات في الصفحات التالية لصفحة تسجيل الدخول.

أعرف كيفية مسح الصفحات العادية من الشاشة، ولكن ليس تلك الموجودة خلف موقع آمن.

  1. هل يمكن القيام بذلك باستخدام فئة .NET WebClient؟
    • كيف يمكنني تسجيل الدخول تلقائيا؟
    • كيف سأستمر في تسجيل الدخول للصفحات الأخرى؟
هل كانت مفيدة؟

المحلول

تتمثل إحدى الطرق في أتمتة المتصفح - لقد ذكرت WebClient، لذلك أعتقد أنك قد تشير إلى WebClient في .NET.

نقطتان رئيسيتان:

  • لا يوجد شيء مميز فيما يتعلق بـ https المتعلق بـ WebClient - فهو يعمل فقط
  • تُستخدم ملفات تعريف الارتباط عادةً لإجراء المصادقة - ستحتاج إلى التقاطها وإعادة تشغيلها

إليك الخطوات التي سأتبعها:

  1. احصل على نموذج تسجيل الدخول، والتقط ملف تعريف الارتباط في الرد.
  2. باستخدام Xpath وHtmlAgilityPack، ابحث عن أسماء وقيم الحقول "نوع الإدخال = مخفي".
  3. POST لإجراء نموذج تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور وقيم الحقول المخفية في نص الطلب.قم بتضمين ملف تعريف الارتباط في رؤوس الطلب.مرة أخرى، قم بالتقاط ملف تعريف الارتباط في الرد.
  4. احصل على الصفحات التي تريدها، مرة أخرى، مع ملف تعريف الارتباط في رؤوس الطلب.

في الخطوة 2، أذكر طريقة معقدة إلى حد ما لأتمتة تسجيل الدخول.عادةً، يمكنك النشر باستخدام اسم المستخدم وكلمة المرور مباشرة إلى إجراء نموذج تسجيل الدخول المعروف دون الحصول على النموذج الأولي أو ترحيل الحقول المخفية.تحتوي بعض المواقع على التحقق من صحة النموذج (يختلف عن التحقق من صحة الحقل) في نماذجها مما يجعل هذه الطريقة لا تعمل.

أتش تي أم أل أجيليتيباك هي مكتبة .NET تسمح لك بتحويل HTML غير صحيح إلى مستند XmlDocument حتى تتمكن من استخدام XPath فوقه.مفيد للغاية.

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

يعد استخدام أداة لعرض حركة مرور http لهذا النوع من العمل مفيدًا للغاية - أوصي به ieHttpHeaders, العابث, ، أو FireBug (علامة التبويب صافي).

نصائح أخرى

يمكنك بسهولة محاكاة إدخال المستخدم.يمكنك إرسال نموذج على صفحة الويب الخاصة ببرنامجك عن طريق إرسال طلب post\get إلى موقع ويب.
يبدو نموذج تسجيل الدخول النموذجي كما يلي:

<form name="loginForm" method="post" Action="target_page.html">
   <input type="Text" name="Username">
   <input type="Password" name="Password">
</form>

يمكنك إرسال طلب نشر إلى موقع الويب مع توفير قيم لحقول اسم المستخدم وكلمة المرور.ما يحدث بعد إرسال طلبك يعتمد إلى حد كبير على موقع الويب، وعادةً ما سيتم إعادة توجيهك إلى صفحة ما.سيتم تخزين معلومات الترخيص الخاصة بك في الجلسات\ملف تعريف الارتباط.لذا، إذا تمكن العميل من الحفاظ على جلسة الويب/فهم ملفات تعريف الارتباط، فستتمكن من الوصول إلى الصفحات المحمية.

ليس من الواضح من سؤالك ما هي اللغة/الإطار الذي ستستخدمه.على سبيل المثال، يوجد إطار عمل لكشط الشاشة (بما في ذلك وظيفة تسجيل الدخول) مكتوب بلغة Perl - WWW::مكننة

لاحظ أنه قد تواجه بعض المشكلات إذا كان الموقع الذي تحاول تسجيل الدخول إليه يستخدم نصوص جافا أو أحد أنواع اختبارات CAPTCHA.

هل يمكنك التوضيح؟هل فئة WebClient التي تتحدث عنها هي تلك الموجودة في HTTPUnit/Java؟

إذا كان الأمر كذلك، فيجب حفظ جلستك تلقائيًا.

ليس من الواضح من سؤالك فئة WebClient (أو اللغة) التي تشير إليها.

إذا كان لديك Java Runtime، فيمكنك استخدام فئة Apache HttpClient؛إليك مثال كتبته باستخدام Groovy الذي يصل إلى واجهة برمجة التطبيقات اللذيذة عبر SSL:

   def client = new HttpClient()

   def credentials = new UsernamePasswordCredentials( "username", "password" )
   def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
   client.getState().setCredentials( authScope, credentials )

   def url = "https://api.del.icio.us/v1/posts/get"

   def method = new PostMethod( url )
   method.addParameter( "tag", tag )
   client.executeMethod( method )
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top