Uma cópia pirateada de um serviço pago em 39 linhas de código Python

imagem
Durante a execução do pedido de desenvolvimento do bot de telegrama, tive a necessidade de obter uma captura de tela da página da Web com a entrega ao usuário. Por que pensar em uma solução para um problema quando você pode encontrá-lo? Como se viu, para não pagar! Mais suor katom.


Então, o destino me levou ao serviço url2png . Tudo parece ser legal: você se registra, obtém um token de API e faz solicitações. Mas não importa como.


imagem


Não, bem, sério, o VDS para vários bots de telegrama é mais barato! E então ficou claro para mim que eu tinha que sair de todas as formas disponíveis. Não tive que mexer no cérebro por muito tempo, pois existia o Selenium . O Selenium requer a instalação de um driver especial de acordo com o navegador usado. Eu aviso que o PhantomJS não é mais suportado pelo Selenium, portanto o google chrome será usado para funcionar no modo sem cabeça (quando o webdriver for inicializado). Como configurar para este VDS? Primeiramente, você precisa instalar o próprio navegador. No console, insira os seguintes comandos.


sudo apt update sudo apt install -y chromium-browser 

Após esse link, você precisa descobrir a versão mais recente do chromedriver (2.41 no momento). Você precisa instalá-lo com os seguintes comandos.


 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 

Também gostaria de observar que, para depurar os telegramas de bot, você precisará instalar uma VPN em sua máquina, se estiver na Rússia. Agora você pode começar a desenvolver o bot. Você precisará das bibliotecas:


 pytelegrambotapi selenium validators 

Você pode instalá-los silenciosamente usando pip. O início do script é assim.


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

Primeiro, criei um bot e configurei o navegador para funcionar no modo sem cabeça.


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

Então ele lançou uma saudação e ajuda ao usuário.


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

A coisa mais importante que resta é obter uma captura de tela. A biblioteca de validadores valida (desculpe a tautologia) do link inserido pelo usuário. Além disso, usando o módulo OS, a captura de tela é excluída do servidor após o envio, para não ocupar espaço.


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

Lançamos o bot e verificamos seu funcionamento!


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

imagem


Como você pode ver, tudo funciona muito bem. É claro que todos os tipos de bolos podem ser modificados, mas eu me propus a meta de construir a fundação e a alcancei. Na verdade, um link para o bot para pessoas interessadas e para o repositório do github para os interessados. Enquanto isso, tudo de bom, vejo você nas seguintes publicações!

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


All Articles