如何防止随机弹出窗口停止我的代码?

时间:2019-04-18 22:08:30

标签: python selenium google-chrome

首先,对不起,因为英语不是我的母语。 我是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 :(得分:0)

我处理硒中“无法控制的”错误的方式是将可能返回错误的代码放入try和except块中。这样,即使以为遇到错误,仍然可以继续运行代码。

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

答案 1 :(得分:0)

修改: 尝试在每次页面加载后使用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