Une copie piratée d'un service payant en 39 lignes de code Python

image
Lors de l'exécution de la commande de développement du bot télégramme, j'avais besoin d'obtenir une capture d'écran de la page web avec sa livraison à l'utilisateur. Pourquoi penser à une solution à un problème quand on peut le trouver? Il s'est avéré qu'il ne fallait pas payer! Plus de katom de sueur.


Le destin m'a donc poussé vers le service url2png . Tout semble cool: vous vous inscrivez, obtenez un jeton API et faites vous-même des demandes. Mais peu importe comment.


image


Non, eh bien, sérieusement, VDS pour plusieurs robots télégrammes est moins cher! Et puis il m'est devenu clair que je devais sortir de toutes les manières disponibles. Je n'ai pas eu à me creuser la cervelle pendant longtemps, car il y avait une chose telle que le sélénium . Selenium nécessite l'installation d'un pilote spécial en fonction du navigateur utilisé. Je vous préviens que PhantomJS n'est plus pris en charge par Selenium, donc Google Chrome sera utilisé pour fonctionner en mode sans tête (lorsque le pilote Web démarre). Comment configurer pour ce VDS? Tout d'abord, vous devez installer le navigateur lui-même. Dans la console, entrez les commandes suivantes.


sudo apt update sudo apt install -y chromium-browser 

Après ce lien, vous devez découvrir la dernière version de chromedriver (2.41 pour le moment). Vous devez l'installer avec les commandes suivantes.


 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 

Je voudrais également noter que pour déboguer les télégrammes de bot, vous devrez installer un VPN sur votre machine si vous êtes en Russie. Vous pouvez maintenant commencer à développer le bot. Vous aurez besoin des bibliothèques:


 pytelegrambotapi selenium validators 

Vous pouvez les installer tranquillement en utilisant pip. Le début du script ressemble à ceci.


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

J'ai d'abord créé un bot et configuré le navigateur pour fonctionner en mode sans tête.


 #  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') 

Il a ensuite lancé un message d'accueil et aidé l'utilisateur.


 #   /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') 

La chose la plus importante qui reste est d'obtenir une capture d'écran. La bibliothèque des validateurs valide (désolé pour la tautologie) du lien saisi par l'utilisateur. De plus, en utilisant le module os, la capture d'écran est supprimée du serveur après l'envoi, afin de ne pas prendre de place.


 #     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) 

Nous lançons le bot et vérifions son fonctionnement!


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

image


Comme vous pouvez le voir, tout fonctionne très bien. Bien sûr, toutes sortes de petits pains peuvent être modifiés, mais je me suis fixé l'objectif de construire la fondation et je l'ai atteinte. En fait, un lien vers le bot pour les personnes intéressées et vers le référentiel github pour les personnes intéressées. En attendant, tout va bien, à bientôt dans les publications suivantes!

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


All Articles