نسخة مقرصنة من خدمة مدفوعة في 39 سطرًا من كود Python

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


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


الصورة


لا ، حسنًا ، على محمل الجد ، VDS للعديد من الروبوتات برقية أرخص! ثم اتضح لي أنه كان علي الخروج بكل الطرق المتاحة. لم يكن عليّ أن أضع أدمغي لفترة طويلة ، حيث كان هناك شيء مثل السيلينيوم . يتطلب السيلينيوم تثبيت برنامج تشغيل خاص وفقًا للمتصفح المستخدم. أحذرك أن PhantomJS لم يعد مدعومًا بواسطة Selenium ، لذلك سيتم استخدام google chrome للعمل في وضع بلا رأس (عندما يبدأ تشغيل برنامج تشغيل الويب). كيفية تكوين VDS هذا؟ أولاً ، تحتاج إلى تثبيت المتصفح نفسه. في وحدة التحكم ، أدخل الأوامر التالية.


sudo apt update sudo apt install -y chromium-browser 

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


 wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/bin/chromedriver sudo chown root:root /usr/bin/chromedriver sudo chmod +x /usr/bin/chromedriver 

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


 pytelegrambotapi selenium validators 

يمكنك تثبيتها بهدوء باستخدام النقطة. تبدو بداية النص مثل هذا.


 # -*- coding: utf-8 -*- import telebot import os import validators from selenium import webdriver 

في البداية أنشأت روبوتًا وقمت بإعداد المتصفح للعمل في وضع بلا رأس.


 #  token = 'token of this bot' bot = telebot.TeleBot(token, threaded = False) #      headless  options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--disable-dev-shm-usage') options.add_argument('--no-sandbox') 

ثم أطلق تحية ومساعدة للمستخدم.


 #   /start  /help @bot.message_handler(commands=['start']) def hello_user(message): bot.send_message(message.chat.id, 'Hello, ' + message.from_user.username + "!") @bot.message_handler(commands=['help']) def show_help(message): bot.send_message(message.chat.id, 'To get screenshot of webpage use command /getpng.\nExample: /getpng https://www.google.com') 

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


 #     selenium  headless chrome @bot.message_handler(commands=['getpng']) def get_screenshot(message): uid = message.chat.id url = "" try: url = message.text.split(' ')[1] except IndexError: bot.send_message(uid, 'You have not entered URL!') return if not validators.url(url): bot.send_message(uid, 'URL is invalid!') else: photo_path = str(uid) + '.png' driver = webdriver.Chrome(chrome_options = options) driver.set_window_size(1280, 720) driver.get(url) driver.save_screenshot(photo_path) bot.send_photo(uid, photo = open(photo_path, 'rb')) driver.quit() os.remove(photo_path) 

نطلق الروبوت ونتحقق من تشغيله!


 #  if __name__ == '__main__': bot.infinity_polling() 

الصورة


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

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


All Articles