GrannyCola Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября Привет. Кто-нибудь знает как сделать авто поднятие темы? С программированием дружу 2 2 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
ak8 Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября 29.11.2025 в 13:20, GrannyCola сказал: Привет. Кто-нибудь знает как сделать авто поднятие темы? С программированием дружу Если дружишь так сделай, есть всякие библиотеки автоматизации, для python и не только, которые могут тыкать кнопочки и вводить данные в формочки, попробуй их. Но в целом ручной поднятие темы сделано, для того, чтобы была какая-то гарантия что продавец еще на связи. Ссылка на комментарий Поделиться на других сайтах More sharing options...
GrannyCola Опубликовано: 29 ноября Автор Поделиться Опубликовано: 29 ноября Вообще я уже сделал, я думал, просто кто-то конкретно элемент HTML напишет, по которому тыкать надо, а то у меня кнопка заблокирована на поднятие) Ссылка на комментарий Поделиться на других сайтах More sharing options...
ak8 Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября 29.11.2025 в 14:00, GrannyCola сказал: Вообще я уже сделал, я думал, просто кто-то конкретно элемент HTML напишет, по которому тыкать надо, а то у меня кнопка заблокирована на поднятие) Поделись с общественностью трудами своими Ссылка на комментарий Поделиться на других сайтах More sharing options...
GrannyCola Опубликовано: 29 ноября Автор Поделиться Опубликовано: 29 ноября from playwright.sync_api import sync_playwright import logging import time TOPIC_URL = ( "<URL вашей торговой темы>" ) COOKIES = [ { "name": "ips4_device_key", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_member_id", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_login_key", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_IPSSessionFront", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_loggedIn", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, ] LOG_FILE = "topdeck_bump_playwright.log" def setup_logging() -> None: logging.basicConfig( filename=LOG_FILE, level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", ) def bump_via_browser() -> None: logging.info("Starting bump attempt via Playwright") with sync_playwright() as p: browser = p.chromium.launch(headless=True) try: context = browser.new_context() context.add_cookies(COOKIES) page = context.new_page() logging.info("Navigating to topic URL") page.goto(TOPIC_URL, wait_until="networkidle") page.wait_for_timeout(3000) li_selector = 'li[data-controller*="BumpUpTopics"]' li_loc = page.locator(li_selector) li_count = li_loc.count() logging.info("BumpUpTopics <li> count: %s", li_count) if li_count == 0: logging.warning("No <li> with BumpUpTopics found on page") with open("last_page.html", "w", encoding="utf-8") as f: f.write(page.content()) return li_first = li_loc.first spans_in_li = li_first.locator("span") span_count = spans_in_li.count() logging.info("Span count inside BumpUpTopics li: %s", span_count) # Пробуем найти именно disabled / enabled по id bump_span = page.locator("#elBumpDisabled, #elBumpEnabled").first bump_span_count = bump_span.count() logging.info("Bump span by id count: %s", bump_span_count) if bump_span_count == 0: logging.info("Bump span with id not found") with open("last_page.html", "w", encoding="utf-8") as f: f.write(page.content()) return if not bump_span.is_visible(): logging.info( "Bump span found by id, but not visible " "(cooldown or CSS-hidden)" ) return logging.info("Clicking bump span by id...") bump_span.click() page.wait_for_timeout(3000) logging.info("Bump span click finished") finally: browser.close() if __name__ == "__main__": setup_logging() while True: try: logging.info("=== New hourly bump cycle started ===") bump_via_browser() except Exception as exc: logging.exception("Unhandled error in main loop: %s", exc) logging.info("Sleeping for 1 hour before next attempt") time.sleep(3600) Пока сделал так. Каждый час скрипт пытается через эмуляцию браузера нажать на кнопку. Разворачивать на VDS сервере. Предварительно вы должны узнать свои куки (подставить соответствующие значения в места, где написано """<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", через пункт Сеть в Панели разработчика браузера, которая открывается через F12. Потом как раз блокируется кнопка, можно будет сделать и без эмуляции браузера, когда подсмотрю элемент. Если надо подробнее - пишите, постараюсь ответить. 2 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
ak8 Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября 29.11.2025 в 19:46, GrannyCola сказал: from playwright.sync_api import sync_playwright import logging import time TOPIC_URL = ( "<URL вашей торговой темы>" ) COOKIES = [ { "name": "ips4_device_key", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_member_id", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_login_key", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_IPSSessionFront", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, { "name": "ips4_loggedIn", "value": "<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", "domain": "topdeck.ru", "path": "/", }, ] LOG_FILE = "topdeck_bump_playwright.log" def setup_logging() -> None: logging.basicConfig( filename=LOG_FILE, level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", ) def bump_via_browser() -> None: logging.info("Starting bump attempt via Playwright") with sync_playwright() as p: browser = p.chromium.launch(headless=True) try: context = browser.new_context() context.add_cookies(COOKIES) page = context.new_page() logging.info("Navigating to topic URL") page.goto(TOPIC_URL, wait_until="networkidle") page.wait_for_timeout(3000) li_selector = 'li[data-controller*="BumpUpTopics"]' li_loc = page.locator(li_selector) li_count = li_loc.count() logging.info("BumpUpTopics <li> count: %s", li_count) if li_count == 0: logging.warning("No <li> with BumpUpTopics found on page") with open("last_page.html", "w", encoding="utf-8") as f: f.write(page.content()) return li_first = li_loc.first spans_in_li = li_first.locator("span") span_count = spans_in_li.count() logging.info("Span count inside BumpUpTopics li: %s", span_count) # Пробуем найти именно disabled / enabled по id bump_span = page.locator("#elBumpDisabled, #elBumpEnabled").first bump_span_count = bump_span.count() logging.info("Bump span by id count: %s", bump_span_count) if bump_span_count == 0: logging.info("Bump span with id not found") with open("last_page.html", "w", encoding="utf-8") as f: f.write(page.content()) return if not bump_span.is_visible(): logging.info( "Bump span found by id, but not visible " "(cooldown or CSS-hidden)" ) return logging.info("Clicking bump span by id...") bump_span.click() page.wait_for_timeout(3000) logging.info("Bump span click finished") finally: browser.close() if __name__ == "__main__": setup_logging() while True: try: logging.info("=== New hourly bump cycle started ===") bump_via_browser() except Exception as exc: logging.exception("Unhandled error in main loop: %s", exc) logging.info("Sleeping for 1 hour before next attempt") time.sleep(3600) Пока сделал так. Каждый час скрипт пытается через эмуляцию браузера нажать на кнопку. Разворачивать на VDS сервере. Предварительно вы должны узнать свои куки (подставить соответствующие значения в места, где написано """<ПОДСТАВИТЬ СВОЕ ЗНАЧЕНИЕ>", через пункт Сеть в Панели разработчика браузера, которая открывается через F12. Потом как раз блокируется кнопка, можно будет сделать и без эмуляции браузера, когда подсмотрю элемент. Если надо подробнее - пишите, постараюсь ответить. Я рассчитывал на ссылку на гитхаб, но и так можно, поднимать можно только раз в сутки, так что каждый час смысла нет Ссылка на комментарий Поделиться на других сайтах More sharing options...
GrannyCola Опубликовано: 29 ноября Автор Поделиться Опубликовано: 29 ноября 20 минут назад, ak8 сказал: Я рассчитывал на ссылку на гитхаб, но и так можно, поднимать можно только раз в сутки, так что каждый час смысла нет Согласен. Пока так, костыльно сделал. Можно использовать crontab и просто запускать этот скрипт раз в сутки, в одно и то же время Ссылка на комментарий Поделиться на других сайтах More sharing options...
ak8 Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября 29.11.2025 в 20:15, GrannyCola сказал: Согласен. Пока так, костыльно сделал. Можно использовать crontab и просто запускать этот скрипт раз в сутки, в одно и то же время Вообще можно и реже, ежедневный подъем подразумевает, что у вас что-то новое в теме появилось, достаточно наверное раз в неделю поднимать, чтобы тема из поиска не пропадала Ссылка на комментарий Поделиться на других сайтах More sharing options...
Pooffick Опубликовано: 29 ноября Поделиться Опубликовано: 29 ноября Автоматизируйте и обновление цен с остатками заодно, что толку от обычных апов 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
GrannyCola Опубликовано: 29 ноября Автор Поделиться Опубликовано: 29 ноября 46 минут назад, Pooffick сказал: Автоматизируйте и обновление цен с остатками заодно, что толку от обычных апов В теории можно синхронизировать с какой-нибудь Google таблицей. Ссылка на комментарий Поделиться на других сайтах More sharing options...
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас