Загрузка...

Боты slither.io

Тема в разделе Python создана пользователем Sevon 25 янв 2025. (поднята Воскресенье в 15:34) 209 просмотров

Загрузка...
  1. Sevon
    Sevon Автор темы 25 янв 2025 eby stalcraft 50 19 апр 2020
    Решил попробовать написать ботов для slither.io ради интереса, реализовал это на selenium на откуда сразу несколько проблем - работа со вкладками замедляет запуск ботов и с большим кол-вом ботов (даже с 10) уже перестает закидывать ботов в игру, понятное дело проблемы с нагрузкой на процессор и с памятью. Подскажите можно ли реализовать данную идею с Python и какие библиотеки использовать?

    На данный момент функционал такой:

    TARGET_SERVER_ID - сервер на который закидывать ботов
    MAX_TABS_PER_BROWSER - максимальное кол-во вкладок в одном браузере
    TOTAL_BOTS - общее кол-во ботов
    NICKNAME - единый никнейм для всех ботов

    Код
    import math import time import threading from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # ----------------------------- # Настройки # ----------------------------- TOTAL_BOTS = 10 MAX_TABS_PER_BROWSER = 5 NICKNAME = "Sosiska" URL = "http://slither.com/io" BUTTON_SELECTOR = "div.btnt.nsi.sadg1" # Кнопка Play TARGET_SERVER_ID = "3215" def pick_server_in_tab(driver, wait): try: choose_server_button = wait.until( EC.element_to_be_clickable((By.ID, "csrv")) ) choose_server_button.click() time.sleep(1) all_servers = wait.until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.svi.nsi")) ) print("Все доступные сервера:") for s in all_servers: print(" >", repr(s.text)) found = False for server_div in all_servers: text = server_div.text.strip() if TARGET_SERVER_ID in text: driver.execute_script("arguments[0].scrollIntoView(true);", server_div) time.sleep(0.3) driver.execute_script("arguments[0].click();", server_div) print(f"Сервер {TARGET_SERVER_ID} выбран!") found = True break if not found: raise Exception(f"Сервер {TARGET_SERVER_ID} не найден!") time.sleep(1) except Exception as e: print(f"Ошибка при выборе сервера: {e}") def set_nickname(driver, wait, nickname): try: nick_input = wait.until( EC.presence_of_element_located((By.ID, "nick")) ) nick_input.clear() nick_input.send_keys(nickname) print(f"Установлен ник: {nickname}") time.sleep(1) except Exception as e: print(f"Ошибка при установке ника: {e}") def run_browser_instance(browser_index, tabs_count): chrome_options = Options() chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") # chrome_options.add_argument("--headless") driver = webdriver.Chrome(options=chrome_options) driver.get("about:blank") for i in range(tabs_count - 1): driver.execute_script(f"window.open('{URL}', '_blank');") tab_handles = driver.window_handles for handle in tab_handles: driver.switch_to.window(handle) driver.get(URL) wait = WebDriverWait(driver, 30) for tab_index, handle in enumerate(tab_handles): driver.switch_to.window(handle) pick_server_in_tab(driver, wait) set_nickname(driver, wait, NICKNAME) try: while True: for tab_index, handle in enumerate(tab_handles): driver.switch_to.window(handle) try: button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, BUTTON_SELECTOR)) ) ActionChains(driver).move_to_element(button).click(button).perform() print(f"[Браузер {browser_index} - Вкладка {tab_index}] Кнопка Play нажата") except Exception as e: print(f"[Браузер {browser_index} - Вкладка {tab_index}] Нет кнопки Play или ошибка: {e}") time.sleep(0.5) # задержка между вкладками time.sleep(5) # небольшая пауза после обхода вкладок except KeyboardInterrupt: print(f"[Браузер {browser_index}] Остановка скрипта (Ctrl+C).") finally: driver.quit() def main(): num_browsers = math.ceil(TOTAL_BOTS / MAX_TABS_PER_BROWSER) print(f"Нужно открыть {TOTAL_BOTS} ботов -> {num_browsers} браузеров, каждый до {MAX_TABS_PER_BROWSER} вкладок.") threads = [] remaining_bots = TOTAL_BOTS for i in range(num_browsers): tabs_for_this_browser = min(remaining_bots, MAX_TABS_PER_BROWSER) remaining_bots -= tabs_for_this_browser t = threading.Thread( target=run_browser_instance, args=(i, tabs_for_this_browser), daemon=True ) t.start() threads.append(t) try: for t in threads: t.join() except KeyboardInterrupt: print("Главный поток: KeyboardInterrupt - завершаем программу.") if __name__ == "__main__": main()
     
    25 янв 2025 Изменено
  2. djeifjfo
    djeifjfo 25 янв 2025 6 11 ноя 2024
    cпс за код
     
    1. Sevon Автор темы
Top
JavaScript error: