У меня есть сценарий Python, который запускает веб-драйвер selenium, который выполняется в следующие шаги:
1) Выполнить цикл for, который выполняется x раз
2) В основном цикле for веб-драйвер селена находит кнопки на странице, используя xpath.
3) Для каждой кнопки, найденной селеном, вложенные циклы нажимают каждую кнопку
4) После нажатия кнопки открывается всплывающее окно, которое перенаправляет случайные веб-сайты во всплывающем окне.
5) Далее, селеновый веб-драйвер находит другие кнопки во всплывающем окне и нажимает кнопку, закрывает всплывающее окно и возвращается в главное окно, чтобы нажать вторую кнопку на главном веб-сайте
Этот код отлично работает во время выполнения, но проблема возникает, когда возникают исключения селена.
1) Если во всплывающем окне есть пустая страница, возникает исключение селена, но код, написанный для этого исключения, не выполняется
2) Если всплывающее окно закрывается основным веб-сайтом по истечении времени ожидания (не закрывается веб-драйвером selenium), возникает NoSuchWindowException, но при этом исключении никогда не выполняется
Я пытался несколько раз изменить код, добавив условие if else, но не смог разрешить исключение NoSuchWindowException exceptio
Ниже приведен код:
for _ in range(100):
print("main loop pass")
fb_buttons = driver.find_elements_by_xpath('//a[contains(@class,"pages_button profile_view")]')
for button in fb_buttons:
try:
time.sleep(10)
button.click()
driver.implicitly_wait(5)
driver.switch_to.window(driver.window_handles[1])
driver.execute_script("window.scrollTo(0, 2500)")
print("wiindow scrolled")
like_right = driver.find_elements_by_xpath(
"/html[1]/body[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]")
like_left = driver.find_elements_by_xpath(
"/html/body/div[1]/div/div[2]/div/div[1]/div[1]/div[2]/div/div[2]/table/tbody/tr/td[1]/a[1]")
while like_right:
for right in like_right:
right.click()
break
while like_left:
for left in like_left:
left.click()
break
while like_post:
for like in like_post:
like.click()
break
time.sleep(5)
driver.close()
driver.implicitly_wait(5)
driver.switch_to.window(driver.window_handles[0])
print("clicks executed successfully")
continue
except StaleElementReferenceException as e:
driver.close()
driver.switch_to.window(driver.window_handles[0])
popunder = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/p[2]/a")
if popunder is True:
popunder.click()
driver.implicitly_wait(5)
else:
continue
print("exception occured-element is not attached to the page document")
except ElementNotVisibleException as e:
driver.close()
driver.switch_to.window(driver.window_handles[0])
popunder = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/p[2]/a")
if popunder is True:
popunder.click()
driver.implicitly_wait(5)
else:
continue
print("Exception occured - ElementNotVisibleException")
except WebDriverException as e:
driver.close()
driver.switch_to.window(driver.window_handles[0])
popunder = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/p[2]/a")
if popunder is True:
popunder.click()
driver.implicitly_wait(5)
else:
continue
print("Exception occured - WebDriverException")
except NoSuchWindowException as e:
driver.switch_to.window(driver.window_handles[0])
popunder = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/p[2]/a")
if popunder is True:
popunder.click()
driver.implicitly_wait(5)
else:
continue
print("Exception - NoSuchWindowException - Switched to main window")
else:
time.sleep(5)
refresh.click()
print("refreshed")
Я пытаюсь обработать исключение NoSuchWindowException самим кодом python, поскольку каждый раз, когда всплывающее окно закрывается основным веб-сайтом, возникает это исключение, и сценарий python прекращает выполнение следующего цикла for:
File "C:\Program Files (x86)\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.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
(Session info: chrome=73.0.3683.86)
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 6.1.7601 SP1 x86_64)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/javed/PycharmProjects/clicks/test/fb-click-perfect-working.py", line 98, in <module>
driver.close()
File "C:\Program Files (x86)\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 688, in close
self.execute(Command.CLOSE)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.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
(Session info: chrome=73.0.3683.86)
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 6.1.7601 SP1 x86_64)
Process finished with exit code 1