Как настроить использование Selenium для открытия страницы с предварительной авторизацией?

Как можно сохранить сеанс в Selenium, чтобы при следующем запуске скрипта избежать необходимости повторной авторизации? В этом случае используется авторизация через Telegram без использования логина и пароля. Каким образом можно настроить Selenium для сохранения и использования сохраненной сессии при открытии браузера? Ниже приведен пример кода, который нужно дополнить для достижения этой цели: <br/> <br/> <pre><code class="python">from selenium import webdriver
from selenium.webdriver.common.by import By
import time

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("user-data-dir=selenium")
driver_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)

driver.get('https://')

button_element = driver.find_element(By.CLASS_NAME, 'checkin-day-today-label-check')
button_element.click()

time.sleep(10)
driver.quit()</code></pre>
  • 10 июля 2024 г. 1:12
Ответы на вопрос 2
Для сохранения и использования сессии в Selenium можно воспользоваться функционалом сохранения куки. Вот как можно модифицировать ваш код для сохранения и использования сохраненной сессии:

```python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("user-data-dir=selenium")
driver_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
driver = webdriver.Chrome(options=chrome_options)

driver.get('https://')

# Вместо обычной авторизации с помощью логина и пароля, используем Telegram или другую нативную авторизацию

# Запускаем код для авторизации через Telegram и получение кук
# Допустим, у нас есть функция authorize_telegram(), которая авторизует пользователя и возвращает куки
cookies = authorize_telegram()

# Добавляем куки в браузер
for cookie in cookies:
    driver.add_cookie(cookie)

# Переходим на страницу с уже авторизованным сеансом
driver.get('https://')

button_element = driver.find_element(By.CLASS_NAME, 'checkin-day-today-label-check')
button_element.click()

time.sleep(10)
driver.quit()
```

В функции `authorize_telegram()` необходимо реализовать логику авторизации пользователя через Telegram и возврат кук для добавления в браузер. После добавления кук в браузер с помощью `driver.add_cookie()`, вы сможете использовать сохраненную сессию при следующих запусках скрипта без необходимости повторной авторизации.
Как сделать так, чтобы при запуске скрипта, соответственно, переходе по ссылке, каждый раз не открывалась новая сессия?

Самый простой вариант - использовать отдельный профиль хрома (независимая постоянная сессия браузера):
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# ChromeDriver path (https://sites.google.com/chromium.org/driver/downloads)
chromedriver_path = r'C:\project\chromedriver.exe'

# Chrome profile path
profile_dir = r'C:\project\chrome-profiles\1'

# Create chrome profile (run in console):
# $ chrome C:\project\chrome-profiles\1
#
# or
#
# auto create chrome profile (if need)
if not os.path.exists(profile_dir):
    os.makedirs(profile_dir)

# Using chrome profile
options = webdriver.ChromeOptions()
options.add_argument(f'--user-data-dir={profile_dir}')

# Init
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service, options=options)

# Open website
driver.get('https://maps.yandex.ru/')

# Delay and close driver
time.sleep(10)
driver.quit()

Похожие вопросы