ReCaptcha الالتفافية في اختبارات السيلينيوم

ReCaptcha (وهي محبوبة شعبياً "CAPTCHA" ) هي واحدة من أكثر الأشياء المؤلمة التي قد تواجهها أداة الاختبار التلقائي في طريقها. الآلاف من مقاطع الفيديو المختلفة التي سجلها المهاجرون من الهند المشمسة يسيرون على شبكة الإنترنت فيما يتعلق بالرقص مع الدف فمن الممكن خداع هذا الوحش. في الواقع ، من الصعب للغاية محاولة التفاعل مع البرامج النصية المبرمجة مع شيء الغرض الرئيسي منه هو التأكد من أنك لست روبوتًا.

إخلاء مهم للغاية: من المستحيل خداع كلمة التحقق.

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

الصورة

اتضح لا يوجد مخرج؟

ليس كل شيء متشائم للغاية. في بعض الأحيان يكفي محاولة إعطاء نفسك الإجابة الأكثر دقة على السؤال "ما هو التحدي الذي يواجهني؟" وننظر إلى الوضع على نطاق أوسع. في معظم الحالات ، ستفهم أن هدفك ليس خداع اختبار CAPTCHA ، ولكن تجاوزه من أجل اختبار الوظيفة المخفية وراءه. في مثال حالتي ، سأطلعكم على الخيارات التي وجدتها لحل المهمة.

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


غير العاملين


تسجيل الدخول عبر جوجل أو الفيسبوك


بالإضافة إلى المصادقة الكلاسيكية ، كان هناك تسجيل دخول قانوني مع Google / Facebook. بالطبع ، "كلمة التحقق" الخاصة بهم كانت موجودة أيضًا هناك ، لذلك لم يساعد هذا الخيار في حل المشكلة.

محاكاة سلوك المستخدم


نعم ، لقد جربتها أيضًا. كان مضحكا ، ولكن من السذاجة للغاية.



العمال


ملفات Chrome / Firefox


دعنا نتحدث عن الخيار "الحي" الأول. تتمتع برامج تشغيل هذه المتصفحات (chromedriver / geckodriver) بالقدرة على التشغيل ضمن ملف تعريف مستخدم محدد مسبقًا. يقوم بتخزين جميع كلمات المرور المخزنة ، وملفات تعريف الارتباط ، والدورات ، وحتى تاريخ المتصفح والإشارات المرجعية. أي وبالتالي ، فقد فاتنا ببساطة خطوة تسجيل الدخول التي تعتبر غير مهمة على الإطلاق لمهمتنا ، وبالتالي وصلنا مباشرة إلى الصفحة مع كائن الاختبار. يتم تنفيذه على النحو التالي:

  1. إنشاء ملف تعريف مستعرض "نظيف"
  2. أدخل captcha يدويًا وقم بتسجيل الدخول إلى المورد المطلوب
  3. انسخ ملف التعريف المطلوب إلى مشروعنا (HOWTO for Firefox و Chrome )

بعد ذلك ، نحتاج إلى إخبار السائق بأنه يجب تحميله من ملف التعريف المحدد:

فايرفوكس:

//   FirefoxProfile profile = new FirefoxProfile(new File("////")); //      FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); //   WebDriver driver = new FirefoxDriver(options); 

كروم:

 //      ChromeOptions options = new ChromeOptions(); options.addArgument("--user-data-dir=/////"); options.addArgument("--profile-directory=____"); //   WebDriver driver = new ChromeDriver(options); 

أثبت هذا النهج أنه جيد عند اختباره على جهاز محلي مثبت عليه المستعرض وملفات gecko- / cromedrivers المعتادة ، ولكن كانت هناك مشاكل عند التشغيل على Jenkins. إننا نرفع محور سيلينيوم والعقد داخل نظام Kubernetes ، لذلك واجهنا مشاكل في شكل دليل كان طويلاً للغاية فيه تحميل الدليل داخل الحاوية (يبلغ حجم الملف الشخصي النظيف في المتوسط ​​حوالي 25 ميغابايت ، وهو كثير جدًا) ، بالإضافة إلى بعض المشاكل المتعلقة بأذونات CRUD للمتصفح ، والتي تعذر إجراء تغييرات على ملف التعريف في وقت التشغيل ، وسقط مع تنفيذ "خطأ غير معروف: فشل في كتابة ملف prefs". بالإضافة إلى ذلك ، فإن تحديث ملف التعريف بعد وصول ملفات تعريف الارتباط والجلسات إلى تواريخ انتهاء الصلاحية غير مريح تمامًا ، ولم أرغب في الاحتفاظ بمجلد ضخم يحتوي على ملفات التعريف الداخلية في المشروع ، لذلك تم اختيار الخيار التالي في النهاية.

ملفات تعريف الارتباط


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

  1. تسجيل الدخول يدويا
  2. من خلال الشبكة ، نتطلع إلى طلب رؤوس -> ملفات تعريف الارتباط التي يرسلها متصفحنا

أضفهم إلى اختباراتنا على النحو التالي:

 //  cookie private static final Cookie COOKIE = new Cookie("", "", "", "", new Date("")); //   WebDriver driver = new ChromeDriver(options); //  cookie   driver.manage().addCookie(COOKIE); 

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



وإذا كنت لا تحتاج إلى تسجيل الدخول؟



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

  1. اتفق مع المطورين لتزويدك بنوع من الحل. توفر Google مثل هذه الفرصة ، لكن تذكر أنك تقوم بعمل ثغرة صغيرة في الأمان.
  2. استفد من الخدمات المدفوعة من طرف ثالث والتي تأخذ لقطة شاشة captcha من جانبك ، حاول فك تشفيرها ، وترسل لك قيمة غير مشفرة. أنا شخصياً لم أجرب هذه الطريقة ولا يمكنني التوصية بها تمامًا.



لتلخيص


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

شكرا لاهتمامكم

ملحوظة: إذا كنت تعرف أي حلول أخرى تعمل في الحياة الواقعية - يرجى وصفها في التعليقات ، سيكون من الممتع جدًا قراءتها.

Source: https://habr.com/ru/post/ar442034/


All Articles