Bagaimana saya mendapatkan persediaan pizza bawang putih seumur hidup menggunakan Python dan Selenium

Kisah seorang siswa yang lapar dengan pikiran yang ingin tahu



Aku tidak tahu tentangmu, tapi aku suka pizza. Apalagi jika itu stik pizza bawang putih spesial Papa John. Oleh karena itu, saya sangat senang ketika, setelah memesan makanan untuk dibawa pulang, saya menerima surat berikut dari mereka:





Papa John's (c) Judul utama surat survei



Makanan gratis! Saya pasti perlu mengikuti survei ini ...



Wawancara





Halaman Penutupan Survei Papa John (c)



Saya menyelesaikan survei sebagai orang biasa dan menerima kode validasi untuk pizza bawang putih gratis.



Tapi karena penasaran, saya melihat lagi link tersebut. Sepertinya parameter GUID adalah ID klien. Coba tebak apa yang terjadi ketika saya mengubahnya menjadi sesuatu yang acak? Sebuah jajak pendapat baru muncul dengan stik pizza gratis yang baru.



Saya bisa melakukan ini selamanya! Tapi ini bukan penggunaan waktuku yang paling efisien, jadi mari gunakan beberapa sihir Selenium.



Bot



Selenium Webdriver  adalah kerangka kerja otomatisasi browser yang terutama digunakan untuk pengujian. Saya memilih Python sebagai bahasa pemrograman saya dan memutuskan untuk mencoba Selenium untuk membangun bot polling.



Instalasi



Pertama, jalankan pip install seleniumdan pip install fake_useragent. Apa itu agen pengguna? Dokumentasi MDN mendefinisikannya sebagai berikut:



Header permintaan Agen-Pengguna adalah string yang memungkinkan server dan node jaringan untuk mengidentifikasi aplikasi, sistem operasi, vendor, dan / atau versi agen yang mengirim permintaan.


Sepertinya ide yang bagus untuk mengacak tajuk ini untuk melewati mekanisme pemfilteran / pemblokiran yang mungkin - di situlah tempatnya fake_useragent.



Selain itu, Anda harus mengunduh ChromeDriver untuk berinteraksi dengan browser Chrome.



Kode



Penyiapan Selenium dasar terlihat seperti ini (inisialisasi dengan agen pengguna acak):



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)


Setelah mengacak parameter GUID, bot membuka halaman web dan mulai mengklik. Saya menambahkan jeda kedua di antara tindakan sehingga halaman memiliki waktu untuk memuat dan terlihat seperti orang sungguhan.



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)


Bagian dari skrip bot



XPath



XPath adalah bahasa kueri untuk memilih node dari dokumen HTML atau XML. Untuk setiap pertanyaan survei, saya menggunakan alat pengujian XPath waktu nyata untuk memilih node yang benar yang diklik oleh bot. Tentu saja, saya memberi Papa John 5 bintang dalam semua hal.





Pengujian XPath



Sama-sama!



Akhirnya, kami mendapatkan kode validasi.





Papa John's (c) Halaman terakhir dari survei



driver.find_element_by_id('NextButton').click()
time.sleep(1)

code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2]


Mengekstrak kode validasi



Perayaan



Setelah setengah jam pemrograman, bot python siap. Berikut inti dari kode, dan inilah cara kerjanya:





Terima kasih, Papa John's



Saya memasukkan semua kode yang dihasilkan saat menghitung di keranjang belanja Papa John. Dan ini dia - persediaan stik pizza bawang putih yang berpotensi tak ada habisnya.



Pizza gratis untuk saya dan ulasan bagus untuk Papa John's Marketing. Sepertinya situasi win-win! Untuk bot ini, saya bahkan harus belajar XPath dan mengasah skill Selenium saya.







Tentu saja, saya tidak memesan apa pun. Sebagai orang yang jujur, saya telah memberi tahu Papa John tentang kerentanan bersama dengan bukti video. Sampai tulisan ini dibuat, mereka belum menanggapi. Tapi jajak pendapat tidak berfungsi lagi, jadi saya pikir mereka mengerti.



Ngomong-ngomong, aku bisa memprogram untuk memesan 1000 pizza bawang putih dari setiap toko Papa John di seluruh Inggris dan sendirian membuat rantai Papa John menjadi gila. Dapatkah Anda membayangkan kekacauan yang akan terjadi?



Saya mungkin telah melakukan ini di alam semesta paralel.



All Articles