selenium выдает «Сообщение: нет такого окна: целевое окно уже закрыто из-за неизвестной ошибки: веб-просмотр не найден»

#python #selenium #selenium-webdriver #selenium-chromedriver

#python #селен #selenium-webdriver #selenium-chromedriver

Вопрос:

у меня есть скрипт selenium с python, который нажимает на ссылку, а затем переключается на вкладку, на которую была открыта ссылка, этот процесс нужно повторить 3 раза в первый раз, все в порядке, затем я делаю driver.close() , чтобы закрыть текущую активную вкладку, но во втором цикле я получаю эту ошибку:

 File "main.py", line 50, in main
    driver.find_element_by_xpath('//*[@id="daily-sets"]/mee-card-group[1]/div/mee-card[2]/div/card-content/mee-rewards-daily-set-item-content/div/div[3]/a').click()
  File "C:Users\AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:Users\AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:Users\AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:Users\AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
from unknown error: web view not found
  

код такой:

 from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from data import *

def main():

    driver = webdriver.Chrome(executable_path=driverpath, options=options)
    driver.get(URL)

    #first
    driver.find_element_by_xpath('//*[@id="daily-sets"]/mee-card-group[1]/div/mee-card[1]/div/card-content/mee-rewards-daily-set-item-content/div/div[3]/a').click()
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(30)
    driver.close()
    
    #second
    time.sleep(0.5)
    driver.find_element_by_xpath('//*[@id="daily-sets"]/mee-card-group[1]/div/mee-card[2]/div/card-content/mee-rewards-daily-set-item-content/div/div[3]/a').click()
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(30)
    driver.close()
    
    #third
    time.sleep(0.5)
    driver.find_element_by_xpath('//*[@id="daily-sets"]/mee-card-group[1]/div/mee-card[3]/div/card-content/mee-rewards-daily-set-item-content/div/div[3]/a').click()
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(30)
    driver.close()
  

Комментарии:

1. driver.switch_to.window(driver.window_handles[-1]) переключится на последний дескриптор.

2. Вы также должны переключиться на дескриптор 0 после закрытия вкладки.

3. @arundeepchohan если у меня есть 2 вкладки, не возвращается ли она автоматически к той, которая не закрыта?

4. Если вы посмотрите на журнал ошибок, вы увидите, что это не так

5. после закрытия этого окна драйвер будет находиться в нейтральной зоне. (Он будет использовать дескриптор, который больше не существует.) Вы должны явно указать ему переключиться обратно.

Ответ №1:

Вот более простой способ выполнить цикл 3 раза, щелкнуть и перейти от вкладки к родительскому дескриптору.

 for i in range(1,4):
    driver.find_element_by_xpath('//*[@id="daily-sets"]/mee-card-group[1]/div/mee-card[{}]/div/card-content/mee-rewards-daily-set-item-content/div/div[3]/a'.format(i)).click()
    driver.switch_to.window(driver.window_handles[-1])
    time.sleep(30)
    driver.close()
    driver.switch_to.window(driver.window_handles[-1])