Як використовувати AdsPower із Selenium: налаштування та приклади

By Anonymous☉ 3973 Views

Take a Quick Look

Підключіть AdsPower до Selenium через Local API, запускайте ізольовані антидетект-профілі та автоматизуйте мультиакаунтні робочі процеси з прикладами коду Python.

🔥 Limited-Time Offer! Save extra 10% off on your first monthly plan with code: Anitdetect10

Як використовувати AdsPower із Selenium: налаштування та приклади

AdsPower надає кожному профілю браузера ізольований відбиток, а Selenium дає вам код, який керує браузером. Поєднайте їх, і ви зможете автоматизувати десятки акаунтів, кожен з яких виглядатиме як окремий реальний пристрій. Цей посібник пояснює, як ці два інструменти з'єднуються, покроково описує налаштування та показує робочі приклади на Python, які ви можете адаптувати.

Чому варто поєднувати AdsPower із Selenium

Selenium product interface

Selenium product interface.

Сам по собі Selenium запускає звичайний браузер. Кожен сеанс використовує ті самі файли cookie, відбиток canvas, рендерер WebGL та user agent, тому платформи можуть пов'язати ваші акаунти. AdsPower вирішує цю проблему, створюючи ізольовані середовища браузера з унікальними відбитками (Canvas, WebGL, User Agent, IP тощо) та призначенням проксі для кожного профілю.

Поєднання дає вам:

  • Ізоляцію відбитків для кожного запуску автоматизації. Кожен сеанс Selenium приєднується до іншого профілю AdsPower, тому жодні два запуски не виглядають як один пристрій.
  • Контроль проксі. Трафік виходить через проксі, прив'язаний до цього профілю, а не через вашу локальну IP-адресу.
  • Масштабування без переписування скриптів. Той самий код Selenium працює з сотнями профілів, змінюючи лише один ID.
  • Збереження стану. Файли cookie та входи зберігаються всередині профілю, тому ви автентифікуєтесь один раз і повторно використовуєте сеанс.

Це модель, що лежить в основі мультиакаунтних операцій в електронній комерції, маркетингу в соціальних мережах у великих масштабах, партнерської роботи та веб-скрейпінгу, де кожен запит має виглядати як окремий відвідувач.

Як насправді працює з'єднання

AdsPower запускає локальну службу на вашій машині. Selenium не запускає Chrome самостійно; натомість він просить AdsPower запустити профіль, а потім приєднується до вже запущеного браузера через інтерфейс налагодження.

Потік такий:

  1. Ваш скрипт викликає AdsPower Local API, щоб запустити профіль.
  2. AdsPower запускає браузер цього профілю з його відбитком і проксі.
  3. API повертає шлях до WebDriver та адресу налагодження (значення selenium всередині ws).
  4. Selenium підключається до цієї адреси за допомогою debuggerAddress.
  5. Ваш скрипт керує сторінкою як зазвичай.
  6. Після завершення ви закриваєте драйвер і викликаєте кінцеву точку зупинки.

Тут важливі дві деталі. По-перше, WebDriver, який повертає API, має відповідати версії ядра браузера цього профілю, тому слід використовувати шлях, наданий AdsPower, а не драйвер, завантажений окремо. По-друге, Local API прослуховує http://local.adspower.net:50325 (або http://127.0.0.1:50325), тому нічого не потрібно відкривати в інтернет.

Попередні вимоги

Перш ніж писати код, переконайтеся, що у вас є:

  • Встановлений AdsPower і принаймні один створений профіль. Запишіть його ID профілю (також званий user_id).
  • Увімкнений Local API у налаштуваннях AdsPower.
  • Python 3.8 або новіший із pip.
  • Встановлений пакет Selenium.
  • Ключ API, якщо ваша версія AdsPower вимагає заголовків авторизації.

Встановіть залежності:

pip install selenium requests

Крок 1: Запуск профілю через Local API

Кінцева точка запуску — це GET-запит:

GET http://local.adspower.net:50325/api/v1/browser/start?user_id=<PROFILE_ID>

Корисні необов'язкові параметри включають headless=1 для фонових запусків, open_tabs=1 щоб пропустити відновлення попередніх вкладок, ip_tab=0 щоб приховати сторінку визначення IP, та launch_args для передачі прапорців Chrome, таких як --disable-notifications. Успішна відповідь виглядає так:

{
  "code": 0,
  "data": {
    "ws": {
      "selenium": "127.0.0.1:xxxx",
      "puppeteer": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx"
    },
    "debug_port": "xxxx",
    "webdriver": "C:\\xxxx\\chromedriver.exe"
  },
  "msg": "success"
}

Якщо code не дорівнює 0, профіль не запустився. Поле msg зазвичай підказує, чи неправильний ID профілю, чи не запущено Local API.

Крок 2: Приєднання Selenium до запущеного браузера

Selenium product interface

Selenium product interface.

У Selenium 4.18 і новіших передайте повернутий шлях до WebDriver об'єкту Service і встановіть debuggerAddress у значення selenium:

import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import sys

ads_id = "your_profile_id"
api_key = "your_api_key_here"

open_url = f"http://local.adspower.net:50325/api/v1/browser/start?user_id={ads_id}"
close_url = f"http://local.adspower.net:50325/api/v1/browser/stop?user_id={ads_id}"
headers = {"Authorization": f"Bearer {api_key}"}

resp = requests.get(open_url, headers=headers).json()
if resp["code"] != 0:
    print(resp["msg"])
    sys.exit("Check the profile ID and Local API status")

chrome_driver = resp["data"]["webdriver"]
service = Service(executable_path=chrome_driver)
options = Options()
options.add_experimental_option("debuggerAddress", resp["data"]["ws"]["selenium"])

driver = webdriver.Chrome(service=service, options=options)
print(driver.title)
driver.get("https://www.browserscan.net/")
time.sleep(5)

driver.quit()
requests.get(close_url, headers=headers)

У старіших збірках Selenium 3.x застосовується та сама ідея, але ви передаєте шлях до драйвера позиційно, а не через Service. Якщо ви все ще на 3.x, оновлення — простіше рішення.

Спочатку відкрити сторінку перевірки відбитків — гарна звичка. Це підтверджує, що профіль показує налаштований вами відбиток та IP, перш ніж ви запустите будь-яке реальне завдання.

Крок 3: Створення багаторазового помічника

Жорстке кодування цього в кожному скрипті стає безладним. Обгорніть це в контекстний менеджер, щоб профілі відкривалися та закривалися чисто, навіть якщо завдання не вдається:

from contextlib import contextmanager

BASE = "http://local.adspower.net:50325"

@contextmanager
def adspower_profile(profile_id, api_key=""):
    headers = {"Authorization": f"Bearer {api_key}"} if api_key else {}
    start = requests.get(
        f"{BASE}/api/v1/browser/start",
        params={"user_id": profile_id, "open_tabs": 1, "ip_tab": 0},
        headers=headers,
    ).json()
    if start["code"] != 0:
        raise RuntimeError(start["msg"])

    data = start["data"]
    options = Options()
    options.add_experimental_option("debuggerAddress", data["ws"]["selenium"])
    driver = webdriver.Chrome(
        service=Service(executable_path=data["webdriver"]), options=options
    )
    try:
        yield driver
    finally:
        driver.quit()
        requests.get(
            f"{BASE}/api/v1/browser/stop",
            params={"user_id": profile_id},
            headers=headers,
        )

Тепер будь-яке завдання стає трьома рядками:

with adspower_profile("profile_id_here", api_key) as driver:
    driver.get("https://example.com/dashboard")
    print(driver.title)

Практичний приклад: перевірка акаунтів у профілях

Поширене завдання — перевірити, чи все ще правильно входить партія акаунтів. Перебирайте ID профілів, приєднуйте Selenium до кожного та записуйте результат:

profiles = ["id_001", "id_002", "id_003"]
results = {}

for pid in profiles:
    try:
        with adspower_profile(pid, api_key) as driver:
            driver.get("https://example.com/login")
            driver.find_element("id", "email").send_keys("user@example.com")
            driver.find_element("id", "password").send_keys("secret")
            driver.find_element("css selector", "button[type=submit]").click()
            results[pid] = "ok" if "dashboard" in driver.current_url else "check"
    except Exception as exc:
        results[pid] = f"error: {exc}"

print(results)

Оскільки кожен профіль зберігає власні файли cookie, профіль, який увійшов учора, все ще в системі сьогодні, і ви можете повністю пропустити крок входу.

Якщо ваша робота — це скрейпінг, а не керування акаунтами, той самий помічник застосовується, але поєднуйте його з API для скрейпінгу або налаштуванням ротації проксі. Для спорідненого шаблону дивіться Як використовувати AdsPower із Scrapestack: налаштування та робочий процес.

Практичний приклад: паралельний запуск профілів

Послідовні запуски повільні, коли у вас багато профілів. Оскільки кожен профіль — це незалежний браузер, ви можете запускати кілька одночасно за допомогою потоків:

from concurrent.futures import ThreadPoolExecutor

def scrape(pid):
    with adspower_profile(pid, api_key) as driver:
        driver.get("https://example.com/data")
        return pid, driver.title

with ThreadPoolExecutor(max_workers=4) as pool:
    for pid, title in pool.map(scrape, profiles):
        print(pid, title)

Тримайте кількість робітників помірною. Кожен запущений профіль споживає реальну пам'ять, а надмірний паралелізм на одній машині сповільнить усе або спричинить тайм-аути. Від чотирьох до восьми одночасних профілів — розумний початковий діапазон на типовій робочій станції.

Поширені проблеми та виправлення

Профіль запускається, але Selenium не може підключитися. Значення debuggerAddress має бути полем selenium, а не URL WebSocket puppeteer. Це різні інтерфейси.

Сеанс не створено або невідповідність версії драйвера. Використовуйте шлях webdriver, повернутий API. Він підібраний до ядра браузера цього профілю. Вручну завантажений драйвер часто не підходить.

API повертає ненульовий код. Перевірте, чи ID профілю точний, чи профіль ще не відкритий і чи увімкнено Local API у налаштуваннях AdsPower.

Браузер відкривається, але сторінка показує неправильне розташування. Проксі прив'язаний до профілю, а не до вашого коду Selenium. Виправте це в налаштуваннях проксі профілю та підтвердьте за допомогою сторінки перевірки відбитків або IP.

Скрипти зависають при виході. Завжди викликайте driver.quit(), а потім кінцеву точку зупинки. Залишені відкритими профілі блокують наступний запуск для того самого профілю.

Безголовий режим поводиться інакше. Деякі сайти виявляють безголові браузери. Якщо завдання не вдається лише в безголовому режимі, спочатку протестуйте його з видимим вікном, щоб ізолювати причину.

AdsPower проти звичайного Selenium: коли що підходить

Selenium product interface

Selenium product interface.

Сценарій Звичайний Selenium AdsPower + Selenium
Тестування вашого власного веб-додатку Добре підходить Непотрібні накладні витрати
Один акаунт, одна машина Добре підходить Необов'язково
Багато акаунтів на одному пристрої Відбитки збігаються Ізольовані профілі для кожного акаунта
Проксі для кожного акаунта Ручне налаштування Прив'язано до профілю
Постійні входи між запусками Крихкий Зберігається всередині профілю
Доступ команди до тих самих профілів Не підтримується Спільний робочий простір

Якщо ваша автоматизація завжди торкається лише одного акаунта, звичайний Selenium простіший. Як тільки зв'язок акаунтів стає ризиком, антидетект-шар виправдовує себе. Якщо ви порівнюєте антидетект-варіанти перед вибором, це порівняння AdsPower vs Incogniton vs BitBrowser охоплює обробку відбитків, підтримку автоматизації та ціноутворення.

Масштабування за межі однієї машини

Коли однієї робочої станції недостатньо, Selenium Grid розподіляє сеанси між кількома машинами. Та сама ідея працює й тут: кожен вузол Grid запускає власний екземпляр AdsPower зі своїм набором профілів, а ваш скрипт спрямовує роботу до потрібного вузла. Тримайте відображення профілю на вузол явним, щоб профіль ніколи не відкривався двічі одночасно.

Документація AdsPower Local API охоплює повний список параметрів для кінцевої точки запуску, включаючи безголовий режим, аргументи запуску та очищення кешу. Офіційна сторінка зразків коду містить версії Python, JavaScript та Java як для Chrome, так і для Firefox, а довідник кінцевої точки відкриття браузера документує кожен параметр запиту та поле повернення.

Пов'язане читання

Джерела та додаткове читання

Часті запитання

Чи працює AdsPower із Selenium 4? Так. Selenium 4.18 і новіші працюють з об'єктом Service, показаним вище. Selenium 3.141 також працює з дещо іншим налаштуванням драйвера.

Чи потрібен мені ключ API? Деякі версії AdsPower вимагають Bearer-токен у заголовках запиту. Якщо ваш Local API приймає неавтентифіковані запити, ви можете опустити заголовок.

Чи можу я запускати профілі AdsPower у безголовому режимі з Selenium? Так, передайте headless=1 у кінцеву точку запуску. Тестуйте обережно, оскільки деякі сайти по-різному ставляться до безголових браузерів.

Скільки профілів можна запустити одночасно? Це залежить від пам'яті та процесора вашої машини. Кожен профіль — це повноцінний екземпляр браузера. Почніть із чотирьох одночасних профілів і поступово збільшуйте.

Чи бачить Selenium проксі профілю? Так. Проксі налаштовано на профілі, тому весь трафік із цього сеансу браузера виходить через нього без будь-яких налаштувань проксі на боці Selenium.

Чи можу я використовувати Firefox замість Chrome? AdsPower підтримує профілі Firefox із Selenium, але це вимагає нещодавнього патча AdsPower і Firefox 123 або новішого. Chrome — більш поширений і краще задокументований шлях.

А як щодо Puppeteer або Playwright? Та сама кінцева точка запуску повертає URL WebSocket puppeteer, до якого Playwright і Puppeteer можуть підключитися через CDP. Якщо ваш стек базується на JavaScript, цей шлях працює так само добре.

Висновок

AdsPower і Selenium чітко розподіляють роботу: AdsPower керує ідентичністю, відбитками та проксі, а Selenium виконує дії, які виконує ваш скрипт. Інтеграція зводиться до одного шаблону: запустіть профіль через Local API, прочитайте повернутий шлях до WebDriver та адресу налагодження і приєднайте Selenium до запущеного браузера.

Щойно ця функція-помічник існує, масштабування — це просто цикл або пул потоків. Додайте ізоляцію на рівні профілю, підтримуйте розумну кількість робітників і завжди закривайте профілі після завершення завдання. Якщо ви також керуєте вітринами або соціальними акаунтами вручну поряд із автоматизацією, такий посібник, як Як використовувати AdsPower із Shopify: посібник із налаштування кількох магазинів, показує, як та сама структура профілів підтримує щоденні операції.

AI INSIGHTS

Need a Quick Summary? Ask AI