Как автоматизировать открытие новых вкладок в Google Chrome?Селен Питон - PullRequest
0 голосов
/ 15 мая 2018

Для задачи автоматизации требуется перейти на открытую вкладку, выполнить команду (нажатие кнопки) и затем перейти к следующей вкладке. Этот процесс повторяется для следующих 4-5 вкладок.

У меня уже есть код, который автоматизирует этот процесс. У меня есть цикл for, который проходит через каждый из дескрипторов окна для открытых вкладок и автоматизирует нажатие кнопки. Но проблема в том, что на каждой вкладке драйвер ожидает выполнения нажатия кнопки для обработки и загрузки новой страницы, прежде чем перейти к следующей вкладке . В идеале я хочу, чтобы драйвер нажимал на кнопку и сразу переходил к следующей вкладке, не дожидаясь загрузки новой страницы.

Есть ли какой-нибудь метод для достижения этой цели? Есть ли другие варианты, кроме использования Selenium для такого рода автоматизации.

Мой текущий код выглядит примерно так:

handles = driver.window_handles
for i in range(4):
    driver.switch_to_window(handles[i])
    driver.find_element_by_id('submit').click()

for i in range(3):
    driver.switch_to_window(driver.window_handles[i+1])

    chain = ActionChains(driver)
    element = driver.find_element_by_name('submit')
    chain.move_to_element_with_offset(element, 0, 0)
    chain.click(element)
    chain.release(element)
    chain.perform()

Я использовал код aboce, чтобы использовать ActionChains для нажатия кнопки. Но я получаю StateElementReferenceException. Ошибка запускается в chain.perform ()

StaleElementReferenceException: Сообщение: ссылка на устаревший элемент: элемент не прикреплен к документу страницы

1 Ответ

0 голосов
/ 15 мая 2018

Использование цепочек действий для выполнения действия щелчка позволит Selenium продолжать работу, не дожидаясь результата действия щелчка. Протестировано на linux, python3.4, chromedriver2.38:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import *

chain = ActionChains(super().driver)

try:
    element = driver.find_element_by_id('submit')
    chain.move_to_element_with_offset(element, 0, 0)
    chain.click(element)
    chain.release(element)
    # Perform the chained actions including the left-click.
    chain.perform()
except:
    print("Failed to click element")
    raise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...