Как передать код двухфакторной аутентификации в представление Django, использующееся для фонового запуска Selenium webdriver?
Selenium парсит сайт с двухфакторной аутентификацией. Код парсинга работоспособен в консоли: после создания экземпляра драйвера он авторизуется и ожидает код двухфакторной авторизации, который я передаю в виде файла. При появлении файла с кодом 2fa он используется для продолжения парсинга. Хочу перенести код на сервер Django, чтобы на одной из страниц запускать парсинг нажатием кнопки. Далее должна следовать страница запроса кода 2fa, который передается в уже работающий скрипт парсинга и тот продолжается. Подскажите, какие решения можно использовать для решения этой задачи? Возможен ли вариант создания представления, которое создает драйвер, начинает парсинг и рендерит страницу запроса кода, с которой тот передается в другую вьюху но с экземпляром уже работающего драйвера? Или надо изучать асинхронность? Код не прошу, важно понимание подхода, который нужно изучить и применить, но буду благодарен за примеры.
фрагмент кода на тестовой Win-машине:
import time
import configparser
from pathlib import Path
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
config = configparser.ConfigParser()
config.read('auth.ini')
options = Options()
options.add_experimental_option("prefs", {
"download.default_directory": r"C:\fssp_test",
"download.prompt_for_download": False,
"download.directory_upgrade": True,
})
options.add_argument("--headless=new")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.set_window_size(1900, 1080)
driver.maximize_window()
actions = ActionChains(driver)
driver.implicitly_wait(5)
driver.get('https://www.gosuslugi.ru/')
time.sleep(2)
button_login = driver.find_element(By.TAG_NAME, "button")
button_login.send_keys(Keys.ENTER)
time.sleep(1)
login = config['auth']['login']
password = config['auth']['password']
field_login = driver.find_element(By.ID, "login")
field_login.send_keys(login + Keys.ENTER)
field_password = driver.find_element(By.ID, "password")
field_password.send_keys(password + Keys.ENTER)
time.sleep(1)
for i in range(1, 11):
try:
open('2FA.txt')
except FileNotFoundError:
print(f'Attempt {i}: file not found.')
else:
with open('2FA.txt', 'r') as file:
# токен 2FA
token = file.readlines()
Path(Path.cwd(), '2FA.txt').unlink()
break
time.sleep(2)