Первый, что лучше на сегодняшний день, веб или desktop.
И второй вопрос, про то, что выбрать для пользовательского интерфейса: flet, HTML/CSS/JS, QT.
Собираюсь разработать пет-проект
будет намного производительней
ERRORS_FILE = 'error.json'
IMAGES = 'error_images'
error_data = {}
with open(ERRORS_FILE, 'r', encoding='utf-8') as f:
error_data = json.load(f)
# Код бота:
error_code = call.data
error_description = error_data.get(error_code)
# bot.send_message(call.message.chat.id, "Ошибка 501")
bot.send_message(call.message.chat.id, f"Ошибка {error_code}: {error_description}")
# photo = open('501.jpg', 'rb')
image_path = os.path.join(IMAGES, f"{error_code}.jpg")
with open(image_path, 'rb') as photo:
bot.send_photo(call.message.chat.id, photo, caption=error_code)
Как сделать, чтобы при парсинге bs4 как то надо нажать на кнопку
так как я учусь пасингу в bs4
как проверять кодом есть ли нужная библиотека на пайтоне?
import importlib.util
print(importlib.util.find_spec('kek') is not None) # False
Обратил внимание, что последние пару лет все чаще слышу про fastapi, насколько он уже созрел на рынке? "Слышать" это одно (субъективщина, хайп и все такие), может есть какие-то метрики, как определять востребованность конкретной технологии относительно другой, например django и fastapi
mss.mss()
- обязательно ли каждую итерацию захватывать экран заново?time.sleep(0.05) # Проверяем цвет каждые 100 мс
- что то не клеится в Ваших показаниях, на основание чего указано 50мс?Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of retrying which is sadly no longer maintained.
import requests
from tenacity import retry, stop_after_attempt, wait_fixed
@retry(stop=stop_after_attempt(3), wait=wait_fixed(3))
def fetch():
res = requests.get("https://site.ru")
# res = requests.get("https://site.ru", params={"key": "value"})
if res.status_code != 200:
raise requests.exceptions.HTTPError(res.status_code)
data = res.json()
return data
# return data["link"]
print(fetch())
wait=wait_fixed(3)
- ждать 2 секунды между попытками.stop=stop_after_attempt(3)
- остановка после 3х попыток.
Выдаёт ошибку:
Traceback (most recent call last):
line 46, in
for m in n.values():
AttributeError: 'int' object has no attribute 'values'
Подскажите как посчитать сумму элементов в данном словаре
def best_function(d):
sum = 0
for v in d.values():
if isinstance(v, dict):
sum += best_function(v)
else:
sum += v
return sum
print(best_function(dct)) # 3906
Вручную можно сделать через настройку "Разрешить сайтам показывать небезопасный контент" с указанием ссылки на web ui, но не понимаю как это можно реализовать в коде.
cursor.execute("SELECT dollars FROM users WHERE id=?", (message.from_user.id,))
res = cursor.fetchone()
if res:
debet = res[0]
await message.answer(f"Ваш айди: {message.chat.id}\nБаланс: {debet}")
else:
await message.answer("Не знаем таких.")
for item in response.json()['Employees']:
first_name = item["User"]["FullName"]["FirstName"]
last_name = item["User"]["FullName"]["LastName"]
if "MiddleName" in item["User"]["FullName"]:
middle_name = item["User"]["FullName"]["MiddleName"]
else:
middle_name = "отчество отсутствует"
print(f"Имя: {first_name}, фамилия: {last_name}, отчество: {middle_name}")
# Имя: Иван, фамилия: Иванов, отчество: Иванович
# Имя: Петр, фамилия: Петров, отчество: отчество отсутствует
# EC.presence_of_element_located((By.CSS_SELECTOR, "product-slider__img js-product-current-img"))
EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
options = Options()
service = Service(r'D:\project\chromedriver-130.0.6723.93.exe')
driver = webdriver.Chrome(service=service, options=options)
url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
driver.get(url)
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
)
page_html = driver.page_source
print(page_html)
except TimeoutException:
print("Элемент не найден")
finally:
print('Программа завершена')
driver.quit()
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
options = Options()
service = Service(r'D:\project\geckodriver.exe')
driver = webdriver.Firefox(service=service, options=options)
url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
driver.get(url)
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
)
page_html = driver.page_source
print(page_html)
except TimeoutException:
print("Элемент не найден")
finally:
print('Программа завершена')
driver.quit()
your_secret_key
, скорее всего в ЛК этого сайта.your_secret_key
полученный ключ из п1, вместо остальных - в API руководстве написано, что нужно.import requests
# Подставить нужные данные из API руководства
params = {
'key': '?',
'hash_name': '?',
'id': '?',
'price': '?',
}
# GET запрос на сервер, аналог того, что мы использовали в браузере из п2.
response = requests.get('https://rust.tm/api/v2/buy', params=params)
# Печатаем результат запроса, аналог того, что мы использовали в браузере из п3.
print(response.json())
# В консоль распечатается приблизительно это:
# {
# "success": true,
# "id": "136256960"
# }
# Затем нужно циклом обойти результат с сервера и уже на основание полученных данных - предпринять необходимые действия. Например, пойти пожрать, чем я сейчас как раз и займусь... ;)