如何知道页面是否离线?

时间:2018-08-27 08:49:40

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

我用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秒,这不必要地降低了整个测试的速度。

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

3 个答案:

答案 0 :(得分:1)

如果您的用例是要知道页面是否离线或没有响应,您甚至不需要 Selenium ,您只需使用requests.head()方法来自python-requests的内容如下:

  • 代码块:

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

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

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

答案 1 :(得分:-1)

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

How to get HTTP Response Code using Selenium WebDriver

答案 2 :(得分:-1)

我研究了是否可以使用selenium-python检查网站的状态,看来似乎不可能。

参考在这里:https://stackoverflow.com/a/25162599/5863811

因此,我看到有人建议您可以使用python-requests模块从网站获取状态代码,并查看其是否在线。但是,我看到有人说硒是可能的,并且请求模块的响应可能不同

这里是对此的引用:https://stackoverflow.com/a/19246280/5863811

还有另一个关于网站是否使用硒错误的问题:https://stackoverflow.com/a/22753475/5863811