Selenium Python: execute_script выполняется только один раз в цикле

Я хочу выполнить следующую задачу 3 раза, не закрывая браузер. Откройте Google.com во вкладке. Откройте новую вкладку. Затем закройте вкладку, содержащую Google.com. Откройте Google.com в предыдущей недавно открытой вкладке.

Я использую следующий код для открытия новой вкладки:

browser.execute_script("window.open('', 'new_tab')")

Но при выполнении в цикле он выполняется только один раз.

Я напечатал Number of Window Handles, что предполагает, что execute_script выполняется только один раз.

Мой полный код:

cpath="C:/Users/Gupta Niwas/Downloads/Softwares/Browsers/Drivers/chromedriver_win32/chromedriver.exe"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")
chrome_options.add_argument("start-maximized")
#browser = webdriver.Firefox(executable_path=fpath)
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=cpath)


for i in range(3):

    browser.get("https://google.com")
    print(len(browser.window_handles))

    print("current:",browser.current_window_handle)

    browser.execute_script("window.open('', 'new_tab')")

    print(len(browser.window_handles))
    next_tab=browser.window_handles[len(browser.window_handles)-1]
    print(next_tab)
    print(browser.title)
    browser.close()
    print(len(browser.window_handles))

    browser.switch_to_window(next_tab)
    browser.delete_all_cookies()

Во 2-м цикле выдается исключение:

runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp5.py', 

wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')
1
current: CDwindow-75E62D95A2A8A7808C5AC369A8070641
2
CDwindow-F1C8AFC0E5742A2E55CEA17FCD951D1D
Google
1
1
current: CDwindow-F1C8AFC0E5742A2E55CEA17FCD951D1D
1
CDwindow-F1C8AFC0E5742A2E55CEA17FCD951D1D
Google
Traceback (most recent call last):

  File "<ipython-input-1-12046950abfa>", line 1, in <module>
    runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp5.py', wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp5.py", line 34, in <module>
    print(len(browser.window_handles))

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 719, in window_handles
    return self.execute(Command.GET_WINDOW_HANDLES)['value']

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 314, in execute
    self.error_handler.check_response(response)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)

WebDriverException: no such session
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64)

person Abhay    schedule 22.06.2018    source источник


Ответы (1)


Думаю, вот в чем проблема:

next_tab = browser.window_handles[len(browser.window_handles)-1]

Ваш next_tab получает ссылку на текущее окно. И когда вы закрываете текущее окно:

browser.close()

Вы не можете переключиться на next_tab, потому что его не существует. Предлагаю вам отладить свой код и выяснить, какое значение у вас должно быть в browser.window_handles[?]

person Andrei Suvorkov    schedule 22.06.2018
comment
Я передаю дескриптор окна последней вкладки, т. Е. Вновь созданной. Если вы запустите мой код, я добавил операторы печати, чтобы печатать количество окон в требуемых точках. Затем вы можете видеть, что в цикле 2 количество оконных дескрипторов не увеличивается до 2. - person Abhay; 22.06.2018
comment
Было бы неплохо, если бы вы опубликовали полный вывод, который вы получаете, я не могу сейчас выполнить код. - person Andrei Suvorkov; 22.06.2018