Хабрахабр

[recovery mode] Пиратская копия платного сервиса в 39 строчек Python кода

Зачем задумываться над решением проблемы, когда его можно найти? image
Во время выполнения заказа по разработке telegram бота у меня возникла необходимость получения скриншота веб-страницы с его доставкой пользователю. Подробнее пот катом. Как оказалось, чтобы не платить!

Вроде бы всё круто: регистрируешься, получаешь API токен и делаешь себе запросы. Так вот, судьба натолкнула меня на сервис url2png. Но как бы не так.

image

И тут мне стало ясно, что придётся выкручиваться всеми доступными способами. Нет, ну серьёзно, VDS под несколько телеграм ботов дешевле стоит! Selenium требует для работы установки специального драйвера в соответствии с используемым браузером. Долго ломать голову не пришлось, благо нашлась такая вещь как Selenium. Как настроить для этого VDS? Предупреждаю, что PhantomJS больше не поддерживается Selenium'ом, поэтому для работы в headless режиме(при запуске webdriver окно браузера не открывается) будет использоваться google chrome. В консоли нужно ввести следующие команды. Перво-наперво надо установить сам браузер.

sudo apt update
sudo apt install -y chromium-browser

41 на данный момент). После, по этой ссылке необходимо узнать последнюю версию chromedriver(2. Установить его нужно следующими командами.

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

На мой взгляд одним из лучших решений будет сервис Windscribe, так как сразу после регистрации можно получить халявные 15 GB трафика на высокой скорости в месяц. Также хочется отметить, что для отладки телеграм бота на своей машине придётся установить VPN, если вы находитесь в России. Понадобятся библиотеки: Теперь можно приступать к разработке бота.

pytelegrambotapi
selenium
validators

Начало скрипта выглядит так. Установить их можно спокойно с помощью pip.

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

Сначала я создал бота и настроил браузер для работы в headless режиме.

#создаём бота 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')

С помощью библиотеки validators осуществляется валидация(извините за тавтологию) введённой пользователем ссылки. Осталось самое главное — получение скриншота. Также с помощью модуля os скриншот удаляется с сервера после отправки, дабы не занимать место.

#получение скрина сайта с помощью 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()

image

Конечно, всякие плюшки можно доработать, но я поставил перед собой цель построить фундамент и достиг её. As you can see, всё работает замечательно. Ну а пока всем добра, увидимся в следующих публикациях! Собственно, ссылка на бота для желающих и на гитхаб репозиторий для интересующихся.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть