Как работать с окнами (двумя браузерами) в selenium?

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023

Мой селениум доходит до этой кнопки (кликает по ней) введите сюда описание изображения

После клика, выходит такое окно введите сюда описание изображения

Мне нужно написать в поле имя и фамилию, но не выходит, как будто селениум работает с браузером, а не с этим окном.

Так это выглядит в меню "пуск"

Так это выглядит

Так это выглядит на мониторе

Так это выглядит

Работаю с Xpath, помогите как можно переключится между ними? iframe в просмотре элемента нету

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
binary_yandex_driver_file = 'yandexdriver.exe' # path to YandexDriver
driver = webdriver.Chrome(binary_yandex_driver_file, options=options)
driver.get('https://elibrary.ru/')

xpath='/html/body/table/tbody/tr/td/table[1]/tbody/tr/td[1]/table/tbody/tr[2]/td/div/div/table[2]/tbody/tr/td[2]/a'
driver.find_element_by_xpath(xpath).click()

xpath2 = '/html/body/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/table[6]/tbody/tr[1]/td[3]/a'
driver.find_element_by_xpath(xpath2).click()

form_xpath = '/html/body/center/form/table[1]/tbody/tr/td[1]/input'
driver.find_element_by_xpath(form_xpath).send_keys('Kromina')


driver.quit()

Ошибка введите сюда описание изображения

Ответы

▲ 0

Для переключения между окнами вам надо запомнить дескриптор первого окна driver.current_window_handle и затем, когда появиться второе окно переключиться на него по другому дескриптору. После закрытия второго окна не забудьте переместить фокус на первое driver.switch_to.window(original_window). Работа с окнами и вкладками.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

import time

url = 'https://elibrary.ru/'
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)

wait = WebDriverWait(driver, 10)
original_window = driver.current_window_handle
assert len(driver.window_handles) == 1

try:
    xpath = '/html/body/table/tbody/tr/td/table[1]/tbody/tr/td[1]/table/tbody/tr[2]/td/div/div/table[2]/tbody/tr/td[2]/a'
    elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
    elem.click()

    xpath2 = '/html/body/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/table[6]/tbody/tr[1]/td[3]/a'
    elem2 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath2)))
    elem2.click()

    wait.until(EC.number_of_windows_to_be(2))

    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    form_xpath = '/html/body/center/form/table[1]/tbody/tr/td[1]/input'
    elem3 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, form_xpath)))
    print(elem3)
    elem3.send_keys('Kromina')
    time.sleep(5)
finally:
    driver.quit()

----------------------------

<selenium.webdriver.remote.webelement.WebElement (session="10d850bb2265c2dcd51b5804d5e786bd", element="bc330293-fa69-487d-8858-21c63b35ea15")>