如何在Chrome中将Selenium与python结合使用以检查“重新加载页面”?警报并单击“重新加载?”

时间:2019-12-09 17:52:01

标签: python selenium google-chrome selenium-chromedriver

我有一个正在测试的机器人,它在大多数情况下都可以正常运行,但是在浏览到新页面时,Chrome偶尔会抛出一个“重新加载页面?”。警报,它会停止漫游器。如何在漫游器中添加检查该警报的支票,如果该支票在其中,请单击警报上的“重新加载”按钮?

在我的代码中,我有

options.add_argument("--disable-popup-blocking")

driver = webdriver.Chrome(chrome_options=options, executable_path="chromedriver.exe")

但是它仍然偶尔会发生一次。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用driver.switch_to_alert处理这种情况。

我还将在警报本身上调用WebDriverWait,以避免发生NoSuchAlert异常:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

def refresh_with_alert(driver):

    # wrap this in try / except so the whole code does not fail if alert is not present
    try: 
        # attempt to refresh
        driver.refresh()

        # wait until alert is present
        WebDriverWait(driver, 5).until(EC.alert_is_present())

        # switch to alert and accept it
        driver.switch_to.alert.accept()

    except TimeoutException:
        print("No alert was present.")

现在,您可以这样拨打电话:

# refreshes the page and handles refresh alert if it appears
refresh_with_alert(driver)

以上代码将等待5秒钟,以检查是否存在警报-可以根据您的代码需求将其缩短。如果不存在警报,则将在TimeoutException块中击中except。我们只打印一条声明不存在警报的语句,代码将继续运行而不会失败。

如果警报存在,则代码将接受警报以将其关闭。