import cv2
import numpy as np
# Загрузка изображений:
dr_image = cv2.imread('original.png')
# Преобразуем в серое:
gray = cv2.cvtColor(dr_image, cv2.COLOR_BGR2GRAY)
# Бинаризация: черные линии → белые (на чёрном фоне).
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
# Шаблоны:
template1 = cv2.imread('temp2.png', cv2.IMREAD_GRAYSCALE) # ёлочка
template2 = cv2.imread('temp1.png', cv2.IMREAD_GRAYSCALE) # круг
_, template1 = cv2.threshold(template1, 127, 255, cv2.THRESH_BINARY_INV)
_, template2 = cv2.threshold(template2, 127, 255, cv2.THRESH_BINARY_INV)
# Параметры:
threshold1 = 0.7 # для ёлочки
threshold2 = 0.5 # для круга
# Поиск "ёлочки":
result1 = cv2.matchTemplate(binary, template1, cv2.TM_CCOEFF_NORMED)
loc1 = np.where(result1 >= threshold1)
# Поиск "круга":
result2 = cv2.matchTemplate(binary, template2, cv2.TM_CCOEFF_NORMED)
loc2 = np.where(result2 >= threshold2)
# Результат:
result = dr_image.copy()
detected_boxes = []
# Обработка "ёлочки":
for pt in zip(*loc1[::-1]):
x, y = pt
w, h = template1.shape[1], template1.shape[0]
box = (x, y, x + w, y + h)
if not any(np.allclose(box, b, atol=10) for b in detected_boxes):
detected_boxes.append(box)
cv2.rectangle(result, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
cv2.putText(result, "Tree", (pt[0], pt[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
# Обработка "круга":
for pt in zip(*loc2[::-1]):
x, y = pt
w, h = template2.shape[1], template2.shape[0]
box = (x, y, x + w, y + h)
if not any(np.allclose(box, b, atol=10) for b in detected_boxes):
detected_boxes.append(box)
cv2.rectangle(result, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2)
cv2.putText(result, "Circle", (pt[0], pt[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
# Сохраняем результат:
cv2.imwrite('result_with_labels.png', result)
print(f"Найдено объектов: {len(detected_boxes)}")
# Показываем:
cv2.imshow('Detected', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
>>> Найдено объектов: 12
bot = telebot.TeleBot('TOKEN', state_storage=storage)
import telebot
from telebot import types
from telebot.states import State, StatesGroup
from telebot.states.sync.context import StateContext
from telebot.states.sync.middleware import StateMiddleware
from telebot.storage import StateMemoryStorage
from telebot.types import ReplyParameters
storage = StateMemoryStorage()
bot = telebot.TeleBot('TOKEN', state_storage=storage, use_class_middlewares=True)
class MyStates(StatesGroup):
START = State()
US = State()
SUP = State()
@bot.message_handler(commands=["start"])
def start(message: types.Message, state: StateContext):
state.set(MyStates.START)
bot.send_message(
message.chat.id,
f'Привет, {message.from_user.first_name}!\n/sup - оформить подписку\n/us - информация о нас',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
@bot.message_handler(commands=["us"])
def us(message: types.Message, state: StateContext):
state.set(MyStates.US)
bot.send_message(
message.chat.id,
'Информация о нас',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
@bot.message_handler(commands=["sup"])
def sup(message: types.Message, state: StateContext):
state.set(MyStates.SUP)
bot.send_message(
message.chat.id,
'Оформить подписку',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
if __name__ == '__main__':
print('start')
bot.setup_middleware(StateMiddleware(bot))
bot.infinity_polling()
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email_mail_ru():
smtp_server = "smtp.mail.ru"
smtp_port = 587 # или 465 для SSL.
username = "*****@mail.ru" # Анонимный ящик.
password = "****************" # Пароль от приложения.
# Создаем сообщение:
msg = MIMEMultipart()
msg['From'] = username
msg['To'] = "************@mail.ru"
msg['Subject'] = "Тестовое письмо с Mail.ru"
# Текст письма:
body = """тест"""
msg.attach(MIMEText(body, 'plain', 'utf-8'))
try:
# Подключаемся к серверу:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
# Отправляем письмо:
server.sendmail(username, "*********@yahoo.com", msg.as_string())
print("Письмо успешно отправлено через Mail.ru!")
except Exception as e:
print(f"Ошибка при отправке: {e}")
finally:
server.quit()
send_email_mail_ru()
pip install pyOpenSSL cryptography idna certifi urllib3[secure] requests[security]
import urllib3.contrib.pyopenssl # активирует pyOpenSSL для urllib3
urllib3.contrib.pyopenssl.inject_into_urllib3()
import requests
url = "https://www.wildberries.ru/webapi/product/339182812/data?subject=104&kind=1&brand=311487279&lang=ru"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
"Accept": "*/*",
"Referer": "https://www.wildberries.ru/catalog/339182812/detail.aspx",
"X-Requested-With": "XMLHttpRequest",
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.text)
>>>200
>>>{"resultState":0,"value":{"data":{"brandAndSubjectUrl":"/brands/311...
self.load_config()
в самый конец:def __init__(self, window_title=None):
...
self.load_config()
# Ваш код
if __name__ == "__main__":
app = AutoKeylogger(window_title="Notepad++") # Укажите нужное название окна.
app.root.mainloop()
import tkinter as tk
def generator_sequence(data):
for i in data:
yield i
def next_step():
global paused, sequence, after_id
if not paused:
try:
value = next(sequence)
label.config(text=f"Текущее: {value}")
after_id = root.after(1000, next_step) # Планируем следующий шаг.
except StopIteration:
label.config(text="Завершено!")
button.config(state=tk.DISABLED)
def toggle_pause():
global paused, after_id
paused = not paused
button.config(text="Продолжить" if paused else "Пауза")
if not paused: # Если сняли паузу.
if after_id:
root.after_cancel(after_id) # Отменяем предыдущий запланированный вызов.
next_step()
# Инициализация
root = tk.Tk()
after_id = None
paused = True # Начинаем в состоянии паузы.
data = ["A", "B", "C", "D", "E"]
sequence = generator_sequence(data)
label = tk.Label(root, text="Нажмите 'Старт'")
label.pack(pady=10)
button = tk.Button(root, text="Старт", command=toggle_pause)
button.pack()
root.mainloop()
generator_sequence
просто: sequence = iter(data)
. class Villains(Heroes):
def __init__(self):
super().__init__()
parsed_data = json.loads(json_data)
ip_address = parsed_data["data"]["ipAddress"]
ip_address = parsed_data.get("data", {}).get("ipAddress", "N/A")
import json
json_data = '''
{
"data": {
"ipAddress": "192.168.1.1",
"abuseConfidenceScore": 85
}
}
'''
parsed_data = json.loads(json_data)
try:
ip_address = parsed_data.get("data", {}).get("ipAddress", "N/A")
score = parsed_data.get("data", {}).get("abuseConfidenceScore", 0)
print(f"IP: {ip_address}, Score: {score}")
except Exception as e:
print(f"Ошибка: {e}")
import requests
token = '...'
headers = {
"Authorization": f"Bearer {token}",
'Content-Type': 'application/x-www-form-urlencoded'
}
# Обязательные параметры (заполните своими значениями):
name = "lol" # Обязательное поле
platform = "windows" # Обязательное поле (например: "windows", "mac", "linux")
browser_type = "anty" # Обязательное поле (например: "chrome", "firefox", "anty")
proxy_type = "http"
proxy_host = "None" # Тут тоже что-то своё надо, видимо, вставлять.
useragent_mode = "manual"
useragent_value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
# Остальные параметры (можно оставить пустыми или заполнить по необходимости):
tags = []
tabs = ""
main_website = ""
webrtc_mode = ""
webrtc_ip_address = ""
canvas_mode = ""
webgl_mode = ""
webgl_info_mode = ""
webgl_info_vendor = ""
webgl_info_renderer = ""
# Заменить webgl2Maximum на ваше. Это всего лишь пример:
webgl_info_webgl2_maximum = r'{\"MAX_SAMPLES\": 8, \"MAX_DRAW_BUFFERS\": 8, \"MAX_TEXTURE_SIZE\": 16384, \"MAX_ELEMENT_INDEX\": 4294967294, \"MAX_VIEWPORT_DIMS\": [16384, 16384], \"MAX_VERTEX_ATTRIBS\": 16, \"MAX_3D_TEXTURE_SIZE\": 2048, \"MAX_VARYING_VECTORS\": 30, \"MAX_ELEMENTS_INDICES\": 2147483647, \"MAX_TEXTURE_LOD_BIAS\": 15, \"MAX_COLOR_ATTACHMENTS\": 8, \"MAX_ELEMENTS_VERTICES\": 2147483647, \"MAX_RENDERBUFFER_SIZE\": 16384, \"MAX_UNIFORM_BLOCK_SIZE\": 65536, \"MAX_VARYING_COMPONENTS\": 120, \"MAX_TEXTURE_IMAGE_UNITS\": 32, \"MAX_ARRAY_TEXTURE_LAYERS\": 2048, \"MAX_PROGRAM_TEXEL_OFFSET\": 7, \"MIN_PROGRAM_TEXEL_OFFSET\": -8, \"MAX_CUBE_MAP_TEXTURE_SIZE\": 16384, \"MAX_VERTEX_UNIFORM_BLOCKS\": 13, \"MAX_VERTEX_UNIFORM_VECTORS\": 4096, \"MAX_COMBINED_UNIFORM_BLOCKS\": 60, \"MAX_FRAGMENT_UNIFORM_BLOCKS\": 13, \"MAX_UNIFORM_BUFFER_BINDINGS\": 72, \"MAX_FRAGMENT_UNIFORM_VECTORS\": 4096, \"MAX_VERTEX_OUTPUT_COMPONENTS\": 124, \"MAX_FRAGMENT_INPUT_COMPONENTS\": 124, \"MAX_VERTEX_UNIFORM_COMPONENTS\": 16384, \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\": 32, \"MAX_FRAGMENT_UNIFORM_COMPONENTS\": 16384, \"UNIFORM_BUFFER_OFFSET_ALIGNMENT\": 256, \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\": 64, \"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\": 229376, \"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\": 4, \"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\": 229376, \"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\": 4, \"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\": 128}'
notes_icon = ""
notes_color = ""
notes_style = ""
notes_content = ""
timezone_mode = ""
timezone_value = ""
locale_mode = ""
locale_value = ""
status_id = ""
geolocation_mode = ""
geolocation_latitude = ""
geolocation_longitude = ""
cpu_mode = ""
cpu_value = ""
memory_mode = ""
memory_value = ""
do_not_track = ""
proxy_id = ""
proxy_port = ""
proxy_login = ""
proxy_password = ""
proxy_name = ""
proxy_change_ip_url = ""
# F-строка
payload = f'name={name}&tags%5B%5D={tags}&tabs={tabs}&platform={platform}&mainWebsite={main_website}&useragent%5Bmode%5D={useragent_mode}&useragent%5Bvalue%5D={useragent_value}&webrtc%5Bmode%5D={webrtc_mode}&webrtc%5BipAddress%5D={webrtc_ip_address}&canvas%5Bmode%5D={canvas_mode}&webgl%5Bmode%5D={webgl_mode}&webglInfo%5Bmode%5D={webgl_info_mode}&webglInfo%5Bvendor%5D={webgl_info_vendor}&webglInfo%5Brenderer%5D={webgl_info_renderer}&webglInfo%5Bwebgl2Maximum%5D={webgl_info_webgl2_maximum}&webrtc%3A%20%7Bmode%3A%20%22altered%22%2C%20ipAddress%3A%20null%7D¬es%5Bicon%5D={notes_icon}¬es%5Bcolor%5D={notes_color}¬es%5Bstyle%5D={notes_style}¬es%5Bcontent%5D={notes_content}&timezone%5Bmode%5D={timezone_mode}&timezone%5Bvalue%5D={timezone_value}&locale%5Bmode%5D={locale_mode}&locale%5Bvalue%5D={locale_value}&statusId={status_id}&geolocation%5Bmode%5D={geolocation_mode}&geolocation%5Blatitude%5D={geolocation_latitude}&geolocation%5Blongitude%5D={geolocation_longitude}&cpu%5Bmode%5D={cpu_mode}&cpu%5Bvalue%5D={cpu_value}&memory%5Bmode%5D={memory_mode}&memory%5Bvalue%5D={memory_value}&doNotTrack={do_not_track}&browserType={browser_type}&proxy%5Bid%5D={proxy_id}&proxy%5Btype%5D={proxy_type}&proxy%5Bhost%5D={proxy_host}&proxy%5Bport%5D={proxy_port}&proxy%5Blogin%5D={proxy_login}&proxy%5Bpassword%5D={proxy_password}&proxy%5Bname%5D={proxy_name}&proxy%5BchangeIpUrl%5D={proxy_change_ip_url}'
url = "https://dolphin-anty-api.com/browser_profiles"
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
// Проверяем, что изменение произошло в ячейке A1 нужного листа.
if (range.getA1Notation() === "A1"&& sheet.getName() === "Лист1") {
const newValue = range.getValue();
const b1Cell = sheet.getRange("B1");
const currentSum = b1Cell.getValue() || 0;
if (!isNaN(newValue)) {
b1Cell.setValue(currentSum + newValue);
}
}
}
зачем нужно прописывать мосты
В некоторых странах доступ к сети Tor может быть заблокирован. Мосты, не являющиеся частью публичного списка узлов, позволяют обойти эти блокировки, так как их сложнее обнаружить и заблокировать.
#Requires AutoHotkey v2.0
SendMode "Input"
SetWorkingDir A_ScriptDir
; Проверяем, передан ли URL
if !A_Args.Length {
MsgBox "Ошибка: Не указан URL. Используйте: `n`nOpenInFirefox.ahk `"https://example.com`""
ExitApp 1
}
URL := A_Args[1]
; Проверяем, запущен ли Firefox
if ProcessExist("firefox.exe") {
try {
; Активируем окно Firefox и вставляем URL в текущую вкладку
WinActivate "ahk_exe firefox.exe"
Sleep 200
Send "^l" ; Ctrl+L (фокус на адресную строку)
Sleep 100
SendInput URL "{Enter}"
} catch as e {
; Если не удалось активировать окно, открываем URL в новом окне
Run 'firefox.exe "' URL '"'
}
} else {
; Если Firefox не запущен, открываем URL в новом окне
Run 'firefox.exe "' URL '"'
}
"C:\path\to\AutoHotkeyUX.exe" "C:\path\to\open_in_firefox.ahk" "https:\\habr.com"
@echo off
"C:\path\to\AutoHotkeyUX.exe" "C:\path\to\open_in_firefox.ahk" %1
C:\path\to\start_in_firefox.bat "https://ya.ru"