قصة طالب جائع بعقل متسائل
لا أعرف عنك لكني أحب البيتزا. خاصة إذا كانت أعواد بيتزا بابا جونز الخاصة بالثوم. لذلك ، شعرت بالسرور عندما تلقيت الرسالة التالية منهم بعد طلب الطعام الجاهز:
بابا جونز (ج) العنوان الرئيسي لرسالة الاستطلاع
طعام مجاني! أنا بالتأكيد بحاجة لإجراء هذا الاستطلاع ...
مقابلة
صفحة إغلاق استبيان Papa John (ج)
لقد أكملت الاستبيان كشخص عادي وتلقيت رمز التحقق من بيتزا الثوم المجانية.
لكن بدافع الفضول ، ألقيت نظرة أخرى على الرابط. يبدو أن معلمة GUID كانت معرف عميل. خمن ماذا حدث عندما غيرته إلى شيء عشوائي؟ ظهر استطلاع جديد تمامًا مع عصي بيتزا مجانية جديدة.
يمكنني فعل هذا إلى الأبد! لكن هذا ليس الاستخدام الأكثر فاعلية لوقتي ، لذلك دعونا نستخدم بعض سحر السيلينيوم.
الروبوت
Selenium Webdriver هو إطار عمل أتمتة للمتصفح يستخدم بشكل أساسي للاختبار. اخترت Python كلغة برمجة خاصة بي وقررت تجربة Selenium لإنشاء روبوت اقتراع.
التركيب
أولاً ، قم بتشغيل
pip install seleniumو pip install fake_useragent. ما هو وكيل المستخدم؟ تحدد وثائق MDN ذلك على النحو التالي:
عنوان طلب وكيل المستخدم عبارة عن سلسلة تسمح للخوادم وعُقد الشبكة بتحديد التطبيق و / أو نظام التشغيل و / أو البائع و / أو إصدار الوكيل الذي أرسل الطلب.
بدت فكرة جيدة أن تقوم بترتيب هذا العنوان عشوائيًا لتجاوز أي آلية تصفية / حظر محتملة - وهنا يأتي دورها
fake_useragent.
بالإضافة إلى ذلك ، كان عليك تنزيل ChromeDriver للتفاعل مع متصفح Chrome.
الرمز
يبدو إعداد السيلينيوم الأساسي كالتالي (التهيئة باستخدام وكيل مستخدم عشوائي):
from fake_useragent import UserAgent
from selenium import webdriver
from random import randrange
import time
ua = UserAgent(verify_ssl=False)
user_agent = ua.random
print("USER AGENT: " + user_agent)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("user-agent=" + user_agent)
driver = webdriver.Chrome(chrome_options=chrome_options)
بعد التوزيع العشوائي لمعامل GUID ، يفتح الروبوت صفحة ويب ويبدأ في النقر. لقد أضفت تأخيرًا ثانيًا بين الإجراءات حتى يتوفر للصفحة وقت للتحميل وتبدو كشخص حقيقي.
id = randrange(100000000000000)
url = "https://www.papajohnsfeedback.com/GBR?GUID=" + str(id)
print(url)
driver.get(url)
time.sleep(1)
driver.find_element_by_id('NextButton').click()
time.sleep(1)
driver.find_element_by_id('NextButton').click()
time.sleep(1)
driver.find_element_by_xpath("//div[contains(@class, 'Opt1')]/span").click()
time.sleep(1)
جزء من البرنامج النصي للبوت
XPath
XPath هي لغة استعلام لتحديد العقد من مستند HTML أو XML. لكل سؤال من أسئلة الاستطلاع ، استخدمت أداة اختبار XPath في الوقت الفعلي لتحديد العقد الصحيحة التي ينقر عليها الروبوت. بالطبع ، أعطيت بابا جونز 5 نجوم من جميع النواحي.
اختبار XPath
على الرحب و السعة!
أخيرًا ، نحصل على رمز التحقق.
صفحة Papa John (ج) الأخيرة من الاستطلاع
driver.find_element_by_id('NextButton').click()
time.sleep(1)
code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2]
استخراج كود التحقق
احتفال
بعد نصف ساعة من البرمجة ، أصبح برنامج بيثون جاهزًا. إليك خلاصة الكود ، وها هو عملي:
شكرا بابا جونز
لقد أدخلت جميع الرموز التي تم إنشاؤها عند الحساب في عربة تسوق Papa John. وها هو - إمداد لا نهائي محتمل من أصابع البيتزا بالثوم.
بيتزا مجانية بالنسبة لي ومراجعات رائعة لتسويق بابا جونز. يبدو وكأنه وضع يكسب فيه الجميع! بالنسبة لهذا الروبوت ، كان علي تعلم XPath وصقل مهاراتي في السيلينيوم.
بالطبع ، لم أطلب أي شيء. بصفتي شخصًا صادقًا ، فقد أخطرت بابا جونز بالثغرة الأمنية جنبًا إلى جنب مع أدلة الفيديو. حتى كتابة هذه السطور ، لم يردوا. لكن الاستطلاع لم يعد يعمل ، لذا أعتقد أنهم فهموا الرسالة.
بالمناسبة ، يمكنني البرمجة لطلب 1000 بيتزا بالثوم من كل متجر Papa John في جميع أنحاء المملكة المتحدة وقيادة سلسلة Papa John بمفردها إلى الجنون. هل يمكنك تخيل كيف ستكون الفوضى؟
ربما فعلت هذا في عالم موازٍ.