Моя цель — автоматизировать задачу на веб-сайте, требующем входа в систему. Поэтому я хочу войти в систему один раз вручную и позволить автоматизации работать оттуда. Я пробовал использовать 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 поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.
Проблема. 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"