0) Установить приложение GIT https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.2/Git-2.47.0.2-64-bit.exe 1) Сгенерировать ключ к GIT локально.
Запустить Терминал (cmd.exe)
Выполнить команду для генерации и создания пары ключей (публичного и приватного): ssh-keygen -t rsa -b 4096 -C «test@gmail.com» На вопрос о кодовой фразе можно не вводить ничего (нажать Enter). Название ключа (такое название у файлов ключа) по умолчанию: id_rsa.pub Файлы ключа SSH будут находится в папке Пользователя Windows в подпапке .ssh Например: C:\Users\Tom.ssh (Tom — это имя пользователя Windows)
2) Добавит ключ на сайт:
Зайти на свой сайт GITLab в раздел https://gitlab.com/-/user_settings/ssh_keys
Нажать на кнопку Add new key
Задать значение поля «Title»
Задать значение «Expiration date»
взять весь текст публичного ключа из файла C:\Users\Tom.ssh\id_rsa.pub (название файла по умолчанию) внести поле «Key» (текст в данном случае начинается с фразы «ssh-rsa»)
Пример хорошего решения для меня при использовании системной библиотеки logging. Для каждого модуля можно создавать свой логгер
import logging
import os
# Путь к файлу в котором хранится лог сообщений
logFileName = './log/log.log'
# Формат сообщения
# Пример: [07.03.2023 21:55:01] - main_process - DEBUG This is a debug message
format = '[%(asctime)s] - %(name)s - %(levelname)-8s %(message)s'
# Базовая конфигурация Ограничение уровня логирования
# формат даты сообщения
# имя файла для лога
# сообщения добавляются в файл
logging.basicConfig(level=logging.DEBUG,
format=format,
datefmt='%m.%d.%Y %H:%M:%S',
filename=logFileName,
filemode='a')
# Обработчик для трансляции в консоль
consoleHandler = logging.StreamHandler()
# Ограничение уровня логирования
consoleHandler.setLevel(logging.INFO)
formatter = logging.Formatter(format)
# Формат сообщения
consoleHandler.setFormatter(formatter)
# Добавление обработчика для трансляции в консоль в базовый (root) логер
logging.getLogger('').addHandler(consoleHandler)
# Создание именованного экземпляра логера для текущего модуля
logger = logging.getLogger('main_process')
logger.debug('This is a debug message') #DEBUG тип сообщения не будет отображаться если базовая настройка уровня логирования выше чем DEBUG
logger.warning('This is a warning message')#WARNING тип сообщения не будет отображаться если базовая настройка уровня логирования выше чем WARNING
Что выводится в консоль:
[07.03.2023 22:34:31] - main_process - DEBUG This is a debug message
[07.03.2023 22:34:31] - main_process - WARNING This is a warning message
Далее код создания отдельного именованного логгера для любого модуля
import logging
# Создание именованного экземпляра логера для текущего модуля
module_logger = logging.getLogger('spam_service.spam')
# Используем экземпляр логгера в функции
def some_function():
module_logger.info('received a call to "some_function"')
Что выводится в консоль (при вызове функции some_function):
[07.03.2023 22:34:31] - spam_service.spam - INFO received a call to "some_function"
Разберем, как можно добавить Pre-request скрипт, чтобы выполнять запрос токена (логин) и использовать его для выполнения других запросов, требующих аутентификацию с этим токеном.
Проблема
Создаем и отправляем запросы в Postman для тестирования работы с API, но каждый раз токен приходится вводить вручную. Токен вводим в первый и в последующие разы при каждом запуске, что занимает время, но понятно что есть способ использовать обширный набор инструментов Postman.
Как организована авторизация в Postman
Структура проекта в нашем случае такая: Корень проекта (в терминах Postamn называется API), Папка-коллекция (набор запросов), Папка (по названию Controller) и Запросы (описание каждого запроса, который нужно тестировать). Здесь и далее речь идет о конфигурации Папки-коллекции и ее Запросов. Настройка авторизации в запросах по умолчанию находится в значении «Inherit auth from parent». Это значит, то мы можем для всех Запросов настроить авторизацию в их родительской Папке-коллекции.
По шагам
В данном случае используем авторизации типа Bearer Token. Необходимо перед каждым запросом, который есть в Папке-Коллекции выполнять предварительный запрос аутентификации для получения Токена. Токен из ответа сервера будет помещен в переменную MyToken. Значение переменной MyToken будет использовано как токен.
1. Выбрать Папку-Коллекцию PizzaWebApi.Web;
2. Выбрать таб с настройками «Authorization» (для текущей коллекции);
3. Выберем метод авторизации Type = «Bearer Token»; 4. Выберем Token = «{{MyToken}}» (без кавычек);
5. Выбрать таб Variables; 6. Создать переменную со значение baseUrl = «http://localhost:5118» (без кавычек, стандартный порт ASP Core);
Создать бота или использовать своего существующего.
Узнать id пользователя, которому нужно послать сообщение.
Убедится, что пользователь послал хотя бы 1 сообщение боту
Как создать бота Телеграм?
Чтобы создать бота и узнать его токен (далее BOT TOKEN) и id обратитесь к статье ссылка .
Как узнать id пользователя?
Чтобы узнать id пользователя Телеграм нужно, чтобы он либо написал сообщение контакту Телеграм @getmyid_bot , либо написал сообщение вашему боту от своего имени (что предпочтительнее).
Важно: чтобы он обозначил, что это именно он, например написал в условленное время или его сообщение содержало его имя.
Важно: в документации id пользователя может/будет называться chatID .
Чтобы прочесть все сообщения полученные в адрес вашего перейдите по ссылке https://api.telegram.org/bot<BOT TOKEN>/getUpdates и получите json ответ от сервера с сообщениями. Подробнее о методе getUpdates .
Важно: сообщения хранятся на сервере Телеграм не более 24 часов, а затем удаляются. В запросе без дополнительных параметров выдается не более 100 позиций.
Код
Параметры функции:
$msg — текст сообщения на английском языке (есть проблемы кодировкой).
$chatID — id пользователя которому отсылается сообщение.
$bot_token — токен бота BOT TOKEN
$emoji_unicode — UTF код иконки для добавления в текст сообщения смайлика из библиотеки. Пример: \xF0\x9F\x94\xA5
Убедитесь, что пользователь послал хотя бы 1 сообщение этому боту иначе любые сообщения от вашего бота не будут доходить.
Forbidden: bot was blocked by the user В некоторых случаях пользователи намеренно блокируют этого бота.
400 Bad Request это может появится, если вы посылаете сообщения слишком часто, что воспринимается как спам сервером. Или с вашего IP адреса, кто то еще посылает слишком много сообщений, что бывает если вы арендуете частный хостинг.
скачать требуемый вэбдрайвер (webdriver) браузера (поддерживаемого) в зависимости от вашей OS для управления им с помощью Selenium https://selenium-python.readthedocs.io/installation.html#drivers Распаковать соответствующий файл в папку: — для Windows: C:/WebDriver\bin\phantomjs.exe — для Linux: /opt/WebDriver/bin/phantomjs В пример я использовал вэбдрайвер PhantomJS (хотя он не рекомендуется для использования), так как не он показывает окно с запускаемой программой
Для того, чтобы воспользоваться вэбдрайвером нужно установить значение системной перменной Path: — для Windows в командной строке (или в ручном режиме) : setx /m path «%path%;C:\WebDriver\bin\» — для Linux ввести в Терминале: export PATH=$PATH:/opt/WebDriver/bin >> ~/.profile Чтобы проверить получилось ли установить path введите в Теримнале команду: phantomjs (chromedriver, если выбрали Chrome) Теримнал покажет готовность получить команды от вас для драйвера. Чтобы выйти из режима нажимте Ctrl+C .
Установить пакет Selenium командой в Терминале (для Windows в Терминале приложения для разработки или тоже в Терминале для Linux): pip install selenium
Исходный код
# ref
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#инициализация
driver = webdriver.PhantomJS()
# переход по ссылке
driver.get(href)
try:
# ожидаем появления на странице элемента с аттрибутом "class" со значением "item-address__string"
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "item-address__string"))
)
# находим нужный элемент
elem = driver.find_element_by_class_name("item-address__string")
# и получаем его текст
full_address = elem.text
print('full_address = ' + full_address)
except BaseException as ex:
print('Error load avito page. Error = ' + format(ex))
# скрин окна барузера (как оно выглядело в момент ошибки)
driver.save_screenshot('screenshot.png')
finally:
# обязательно выгружаем из памяти
driver.quit()
Работаю с Human Emulator Studio 7 на основном языке PHP, столкнулся с проблемой при соединении с БД MySQL при Update операции при использовании библиотеки PDO: 2006 MySQL server has gone away
Мне подошел вариант с изменением настроек php.ini файла в блоке [Pdo_mysql], а именно добавить строчку для увеличения таймаута для ожидания соединения с БД: mysql.connect_timeout=90
[Pdo_mysql] ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. pdo_mysql.default_socket= mysql.connect_timeout=90
P.S. Не забываем устанавливать null для Connection объекта в PDO режиме.
Требуемая версия Python 3.7.6. Хостинг имеет базовые
настройки, где возможно выбрать версию Python
У целевого хостинга используется ISP Manager
Доступ через SSH клиент подключение к хостингу Putty
Настройка в панели управления доменом
Для настройки нужно перейти к Панели управления хостингом, выбрать целевой хостинг.
Перейдите в настройки хостинга в ISP Manager в разделе WWW/WWW-домены. Установить галочку на CGI-скрипты и Версия Python в данном случае значение Python-3.7.6 Нажать OK, чтобы применить изменения.
SSH клиент подключение
Есть хостинг, нужно настроить на нем Python:
Подключение происходит через приложение Putty, которое необходимо установить.
Подключитесь к хостингу по SSH для чего необходимо запустить приложение Putty, прописать в поле Host Name IP адрес целевого хостинга (его можно узнать на странице управления хостингами) и нажать кнопку Open
При первом подключении к серверу появится окно «Предупреждение безопасности PuTTY». Нажмите кнопку Да. Появится окно для набора команд, его мы будем называть Терминал, как в Linux системах
Далее необходимо пройти логин операцию. Введите логин хостинга в первой строке со значением «login as:» и нажмите кнопку Enter для выполнения команды (здесь выполняется команда, Enter выполняет команду, далее подразумевается, что выполняя команду вы будете нажимать эту кнопку ). Далее следует строка: “<username>@<ip adress>’s password:” пишем команду пароль к учетной записи. Как только вы подключитесь по SSH, вы окажетесь в домашнем каталоге вашего хостинга.
5. Создадим Виртуальное окружение, для чего, надо перейдите в домашний каталог вашего пользователя с помощью команды: cd ~ Убедитесь, что вы в нужном каталоге, выполнив команду: pwd Для этого Виртуальное окружение необходимо создать в одной из существующих папок с нужной версией Python. Эту песочницу мы планируем использовать для вашего проекта. Версия Python должна совпадать со значением устанавливаем в пункте 2. Чтобы узнать доступные версии Python, выполните команду: ls -la /opt/python/*/bin/python Для создания виртуального окружения выполните команду: /opt/python/python-3.7.6/bin/python -m venv pyth3 Где pyth3 – это название для Виртуального окружения
6. Активируйте ваше виртуальное окружение с помощью команды: source pyth3/bin/activate Если слева от строки ввода команды появилось название вашего виртуального окружения pyth3, значит оно активировалось.
7. После активации можно использовать команды формата pip install <app name>, для установки набора необходимых библиотек, согласно инструкциям по установке. Библиотека pip, в данном случае, уже установлена. 8. После всех операций, в ISP Manager в Менеджере файлов можно найти папку /pyth3/
Важно: если вы несколько раз подряд ввели неправильный пароль и сервер заблокировал соединение по SSH, обычно блокируется на 2 часа или более Важно: Если лень набирать используйте буфер обмена: для вставки в Терминал используйте Shift+Insert Важно: Обратите внимание: многие из команд выполнить на виртуальном хостинге не получится (установка и удаление пакетов, монтирование файловых систем и др.), так как у вас нет root-доступа. Важно: Для нашей версии Python 3.7.6 будет свой каталог и это называется — Виртуальное окружение. Это как песочница для работы с нужной версией Python. Такой подход гарантирует, что в песочнице будет нужная версия Python и строго определенный набор библиотек. Важно: команда для контроля, какая версия Python в активированном виртуальном окружении: python --version Важно: Если в вашей системе обновилась версия Python, то виртуальное окружение иногда тоже нужно обновить. Но обновлять мы будем папку, где находится библиотека Pythobn, на которую мы ссылаемся. Для этого вызываем venv аналогично созданию окружения, добавив ключ –upgrade команда: pyvenv --upgrade /opt/python/python-3.7.6/bin/python
Проверяем работоспособность Python скрипта
1. Для тестирования необходимо
создать файл test.py с
кодом:
print('Hello')
код выводит в консоль текст Hello
2. Файл по ftp заливаем на
хостинг в папку /pyth3/bin/
3. Для работы в Менеджере файлов нужно найти файл и установить (разрешить) ему
атрибуты на Исполнять, Писать и Читать по схеме -rwxr-xr-x (установить галочку и желательно снять галочки
для атрибутов не члены групп или владелец).
4. Исполнить файл можно в режиме
Терминала (Консоли), например, через Putty.
С активацией:
Логинимся и активируем каталог со средой команда:
source pyth3/bin/activate
Исполняем файл (он лежит в bin папке) команда:
pyth3/bin/python pyth3/bin/test.py
Без активации:
Логинимся и сразу исполняем файл командой:
pyth3/bin/python pyth3/bin/test.py
В итоге мы увидим в терминале
сообщение: Hello
Установка библиотек в Python
Вам точно не будет хватать
базового набора библиотек в Python.
Необходимо будет их подключить, для чего:
1.Логинимся через Putty на Терминал и активируем каталог наш со средой команда:
source pyth3/bin/activate
2. Вводим в Теримнале команду :
pip install <app name>
, где <app name> это имя библиотеки (сборки). Действуя по инструкциям по установке сторонних библиотек. Библиотека pip в данном случае уже установлена.
Запуск скрипта по расписанию Python скрипта
Теперь необходимо выполнять скрипт автоматически периодически,
например, ежедневно. Для примера будем использовать уже созданную нами папку /pyth3/с
Виртуальным окружением, но команда будет выполнятся без активации.
В панели ISP Manager выберите в разделе Главное пункт Планировщик
Планировщик кнопка Настройки здесь заполните email адрес, куда будут приходить письма с отчетом о выполнении (текст из консоли исполняемого приложения)
В меню Планировщик кликаем кнопку Создать
Заполняем поля: Команда, Описание и Выполнять Каждый час команда: pyth3/bin/python3/var/www/u0000000/data/pyth3/bin/test.py Описание: test Выполнять: каждый час или выберите другие интервалы
Жмем кнопку OK и все готово
Чтобы узнать, когда выполнился наш скрипт загляните в указанную выше почту
Важно: команда содержит в себе путь к исполняемому скрипту, он в
вашем случае может быть другим
Важно: значение в команде pyth3/bin/python3 это путь к файлу ядра Python, фактически же ядро находится в другой каталог по адресу /opt/python/python-3.7.6/bin/python, а это ссылка на среду из Виртуального окружения. Если в команде использовать прямую путь к ядру может возникнуть ошибка исполнения, так как мы потеряли связку с дополнительным набором библиотек.
Важно: в консоли, если запросить текущую версию Python командой:
python --version
то в ответ мы получим значение 2.7.15 это ядро по умолчанию. Код примера и библиотек будет работать на версии 3 и выше, поэтому код запускается в Виртуальным окружении, где мы сами определяем, какую версию мы будем использовать.
В феврале 2020 года в приложениях по работе с API Telegram наблюдается следующая ошибка:
System.Net.WebException: Запрос был прерван: Не удалось создать защищенный канал SSL/TLS
Ошибка связана со сменой протокол защиты транспортного уровня TLS на версию 1.2. Для «починки» вашего приложения добавьте в код перед использованием библиотеки API Telegram следующий код (для C#):
Как узнать разработчику сайта, как был сделан ввод значения в элемент сайта input?
Как справляются с этой задачей функции HumanEmulator?
Есть такой флаг, по которому разработчик сайта может узнать, клик на элемент страницы был сделан программно или мышью?
Это isTrusted, это булевое свойство события (далее флаг), только для чтения, имеет значение True, если событие было сгенерировано пользователем и False, если оно вызвано тригером.
Как получить значение этого флага просто для чего добавим через консоль код разработчика подписчик, такого вида:
document.getElementById("code").addEventListener("input", function(event){
console.log('isTrusted = ' + event.isTrusted + ' event type = ' + event.type);
}
);
Значение флага для события клик будет выведено на консоль (в табе Console, Панели разработчика).
И так результаты кликов от HumanEmulator Studio:
Интерфейс DOM метод set_value() – не фиксируется подписчиком
Интерфейс DOM метод send_input() – isTrusted = true
Интерфейс DOM метод input() – isTrusted = true
Интерфейсы DOM методы key_down(‘a’) и key_up(‘a’) – не фиксируется подписчиком
Интерфейс DOM метод send_key(‘1’) – не фиксируется подписчиком
Метод объекта $keyboard->input(‘1’) (на элементе должен стоять фокус) – isTrusted = true
Как узнать разработчику сайта, как было сделано нажатие на элемент сайта? Как справляются с этой задачей функции HumanEmulator?
Есть такой флаг, по которому разработчик сайта может узнать, клик на элемент страницы был сделан программно или мышью?
Это isTrusted, это булевое свойство события (далее флаг), только для чтения, имеет значение True, если событие было сгенерировано пользователем и False, если оно вызвано тригером.
Как получить значение этого флага просто для чего добавим через консоль код разработчика подписчик, такого вида: