【问题标题】:How to know if the page is offline or not responding?如何知道页面是否离线或没有响应?
【发布时间】:2019-02-01 18:37:39
【问题描述】:

我用 Python 编写了一个简单的代码来浏览一些存储在元组中的网页。目标是定期浏览这些页面并检查它们是否在线并做出响应。示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()

links = ('https://stackoverflow.com/', 'https://stackexchange.com/')

while True:
    for url in links:
        try:
            browser.get(url)
            print('OK')
        except Exception as e:
            print('Not OK: {}'.format(e))

但是即使我离线,这段代码也会打印“OK”,所以我猜如果没有到达实际页面,get() 方法不会处理任何异常。

我考虑过使用WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.ID, 'some_common_id'))) 检查我是否已到达实际页面,但我的元组可能包含不同的 url 地址,没有共同的 ID、类或元素...

然后我想扭转这个并使用WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.ID, 'main-frame-error'))) 在离线时搜索您在 Google Chrome 中获得的特定元素(在他们的“恐龙游戏”页面上)。 但在这种情况下,每次成功到达我的元组中的页面时,脚本都必须等待 5 秒,这会不必要地减慢整个测试。

我认为必须有一种更简单的方法来使用 selenium 浏览页面并知道它是否实际到达,但我还没有找到解决方案。

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver webdriver python-requests


    【解决方案1】:

    如果您的 用例 是要知道页面是否离线或没有响应,您甚至不需要 Selenium 并且您可以简单地使用来自 @ 的 requests.head() 方法987654321@如下:

    • 代码块:

      import requests
      links = ['https://stackoverflow.com/', 'https://stackexchange.com/'] 
      for link in links:
          print(requests.head(link))
      
    • 控制台输出:

      <Response [200]>
      <Response [200]>
      

    注意:根据当前的实现,Selenium 在调用get() 方法时实际上也使用了python-requests 模块。

    【讨论】:

    • 谢谢,这适用于我的用例。随着 requests.head() 返回 Response 对象,代码本身可以通过 requests.head(link).status_code 访问。
    【解决方案2】:

    Selenium 不提供获取 http 状态码的模块。因此,您需要使用另一个模块,例如request 模块。这是类似的问题。

    How to get HTTP Response Code using Selenium WebDriver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多