Как я могу предотвратить случайный всплывающих окон от остановки моего кода? - PullRequest
0 голосов
/ 19 апреля 2019

Прежде всего, извините, потому что английский не мой родной язык.И я абсолютный новичок в Python + Selenium (5 дней или около того).И я нашел несколько похожих вопросов, но ни один из них не помог мне (это мой последний ресурс, потому что я ищу решение около двух дней).Это также первый раз, когда я публикую здесь.Я автоматизирую задачу, в которой мне нужно перейти на страницу с несколькими профилями, и она отлично работает.Но если кто-то блокирует меня, появляется всплывающее окно с сообщением, что он не может выполнить действие или что-то в этом роде.Я хочу знать, что я могу сделать, чтобы эти случайные всплывающие окна не останавливали мой код.

Я заметил, что могу остановить отображение изображений, используя код

chrome_prefs["profile.default_content_settings"] = {"images": 2}
chrome_prefs["profile.managed_default_content_settings"] = {"images": 2}

Поэтому я попытался использовать:

chrome_prefs["profile.default_content_settings"] = { "popups": 2 }

И это тоже не сработало (или это неправильно, я понятия не имею).

Я заметил, что код продолжает работать после того, как нажимает заблокированный профиль и единственное, чтопрепятствует этому, это - всплывающее окно.Хотел бы я помешать им появиться или что-то в этом роде.

from selenium import webdriver
import os
import time
option = webdriver.ChromeOptions()
chrome_prefs = {}
option.experimental_options[*"prefs"*] = chrome_prefs
chrome_prefs["profile.default_content_settings"] = {"images": 2}
chrome_prefs["profile.managed_default_content_settings"] = {"images": 2}
chrome_prefs["profile.default_content_settings"] = { "popups": 2 }

driver = webdriver.Chrome(chrome_options=option)
driver.get('https://www.spiritfanfiction.com/login')
driver.find_element_by_xpath("//*[@id='Usuario']").send_keys("######")
driver.find_element_by_xpath("//*[@title='Senha']").send_keys("#########")
driver.find_element_by_xpath("//*[@class='btn btn-primary']").send_keys("#########")
driver.find_element_by_xpath("//*[@class='btn btn-primary']").click()
LinkDoPerfil = driver.get('https://www.spiritfanfiction.com/perfil/vampyxz/seguindo?pagina=12')
x = 1
while True:
       transactionElements = driver.find_elements_by_xpath("//*[@id='botaoSeguir'][@data-seguindo='false']")
       for element in transactionElements:
            element.click()
       time.sleep(2)
       driver.find_element_by_xpath("//*[@class='fa fa-caret-left']").click()
       x += 1

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Редактировать : попробуйте использовать JavaScript, чтобы принимать оповещения после каждой загрузки страницы.driver.execute_script("window.alert = function () { return true}")

Попробуйте

x = 1
while x<12:
       driver.execute_script("window.alert = function () { return true}")
       transactionElements = driver.find_elements_by_xpath("//*[@id='botaoSeguir'][@data-seguindo='false']")
       for element in transactionElements:
            element.click()
       time.sleep(2)
       driver.find_element_by_xpath("//*[@class='fa fa-caret-left']").click()
       x += 1
0 голосов
/ 19 апреля 2019

Способ обработки ошибок, которые «вне моего контроля» в селене, заключается в размещении кода, который может возвращать ошибку, в блоке try и then.Таким образом, даже если вы столкнулись с ошибкой, вы все равно можете продолжить выполнение кода.

while True:
       transactionElements = driver.find_elements_by_xpath("//*[@id='botaoSeguir'][@data-seguindo='false']")
       for element in transactionElements:
            try:
                element.click()
            except:
                """Do something else such as move onto the next element"""
       time.sleep(2)
       driver.find_element_by_xpath("//*[@class='fa fa-caret-left']").click()
       x += 1

...