#python #selenium #selenium-webdriver
Вопрос:
# filename: LudusLogin
import os
from dotenv import load_dotenv
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.expected_conditions import title_is
from selenium.webdriver.support.wait import WebDriverWait
import time
def login():
# Firefox driver for running window
driver = Firefox()
# Going to website
driver.get("website")
WebDriverWait(driver, timeout=3).until(title_is("Meddelelser"))
# Login with credentials from .env
load_dotenv()
usr = os.getenv("usr")
passwd = os.getenv("passwd")
usr_field = driver.find_element(By.CSS_SELECTOR, "#brugerIdField")
passwd_field = driver.find_element(By.CSS_SELECTOR, "#kodeordField")
usr_field.send_keys(usr)
passwd_field.send_keys(passwd)
passwd_field.send_keys(Keys.RETURN)
# Closing messages
time.sleep(2)
close_btn_meddelelser = driver.find_element(By.CLASS_NAME, "v-window-closebox")
close_btn_meddelelser.click()
WebDriverWait(driver, timeout=3).until(title_is("Aktuelt"))
# window_handle = driver.window_handles
window_handle = driver.window_handles[0]
return window_handle
Следующий Файл
Я хочу переключиться в окно из кода выше и продолжить выполнение кода в том же окне
# filename: Main.py
import LudusLogin
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import title_is
from selenium.webdriver.support.wait import WebDriverWait
handle = LudusLogin.login()
print(handle)
driver = Firefox(executable_path='geckodriver.exe')
driver.switch_to.window(handle)
skema_btn = driver.find_element(By.CSS_SELECTOR, "span.v-menubar-menuitem:nth-child(4)")
skema_btn.click()
WebDriverWait(driver, timeout=3).until(title_is("Skemaer"))
Я хочу, чтобы все сценарии для веб-сайта были в Main.py или другие файлы и только логин в одном файле. Когда я пытаюсь, как показано на рисунке, я получаю ошибку: selenium.common.исключения.Исключение NoSuchWindowException: Сообщение: Не удается найти окно:
Ответ №1:
Создайте новый экземпляр драйвера Firefox в Main.py
первом:
driver = Firefox()
Измените login
метод и в LudusLogin.py
и внесите изменения, чтобы принять входную переменную с именем driver
. Затем удалите строку
driver = Firefox()
внутри LudusLogin.py
и позвольте login
телу использовать входную переменную driver
.
Теперь у Main.py
вас есть driver
переменная, которую можно использовать после вызова login
метода. тот driver
, который вы создаете только один раз.