Как подключиться к существующему экземпляру Chrome, вошедшему в систему, в Playwright на MacOs?

Моя цель — автоматизировать задачу на веб-сайте, требующем входа в систему. Поэтому я хочу войти в систему один раз вручную и позволить автоматизации работать оттуда. Я пробовал использовать CRD, но когда мой код запускается, открывается новое окно, в котором моя учетная запись не зарегистрирована. Вот пример кода, который я запускаю:

from playwright.sync_api import sync_playwright
import time


def connect_to_chrome_debugger():
    with sync_playwright() as p:
        # Connect to the running Chrome instance using CDP
        browser = p.chromium.connect_over_cdp("http://localhost:9234")

        # Create a new page in the connected browser
        page = browser.new_page()

        # Navigate to a URL
        page.goto("https://gmail.com")
        time.sleep(10)

        # Print the title of the page
        print(page.title())

        # Perform additional actions as needed

        # Close the page (not the entire browser)
        page.close()


if __name__ == "__main__":
    connect_to_chrome_debugger()

В этом примере я уже вошел в свою учетную запись Gmail в Chrome, и когда я запускаю сеанс CRD, используя:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9234

он показывает меня как вошедшего в систему пользователя. Однако когда драматург запускается и открывает новое окно, он ведет себя так, как будто я вышел из системы.

🤔 А знаете ли вы, что...
Python поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.


2
50
1

Ответ:

Решено

Проблема. Playwright создал новый контекст браузера при подключении к экземпляру Chrome, работающему через CDP. Этот новый контекст не передает данные сеанса (файлы cookie, локальное хранилище и т. д.) существующим вкладкам.

Как вы можете решить эту проблему:

1. Используйте тот же контекст браузера

При подключении через CDP убедитесь, что вы взаимодействуете с существующими вкладками, а не создаете новые. Измените код для повторного использования существующей страницы:

from playwright.sync_api import sync_playwright
import time

def connect_to_chrome_debugger():
    with sync_playwright() as p:
        # Connect to the running Chrome 
        browser = p.chromium.connect_over_cdp("http://localhost:9234")
        
        context = browser.contexts[0]
        page = context.pages[0]  # Assuming you want the first tab, adjust as needed

        # Navigate to a URL 
        page.goto("https://gmail.com")
        time.sleep(10)
    
        print(page.title())

        # Close the page 
        page.close()

if __name__ == "__main__":
    connect_to_chrome_debugger()

2. Используйте каталог пользовательских данных.

userDataDir для Chrome при его запуске для удаленной отладки.

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9234 --user-data-dir = "/path/to/your/profile"