我有一个正在测试的机器人,它大部分工作,但每隔一段时间,当它导航到一个新页面时,Chrome 会抛出"重新加载页面?"警报并停止机器人。如何在机器人中添加检查以查找此警报,如果存在,请单击警报上的"重新加载"按钮?
在我的代码中,我有
options.add_argument("--disable-popup-blocking")
和
driver = webdriver.Chrome(chrome_options=options, executable_path="chromedriver.exe")
但它仍然每隔一段时间就会发生一次。有什么建议吗?
您可以使用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
块中命中。我们只需打印一条声明,指出警报不存在,代码将继续前进而不会失败。
如果警报存在,则代码将接受警报以将其关闭。