我用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秒,这不必要地降低了整个测试的速度。
我认为必须使用一种更简单的方法来浏览含硒的页面,并知道是否确实可以到达硒,但是我还没有找到解决方法。
答案 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
模块。这是类似的问题。
答案 2 :(得分:-1)
我研究了是否可以使用selenium-python检查网站的状态,看来似乎不可能。
参考在这里:https://stackoverflow.com/a/25162599/5863811
因此,我看到有人建议您可以使用python-requests模块从网站获取状态代码,并查看其是否在线。但是,我看到有人说硒是可能的,并且请求模块的响应可能不同。
这里是对此的引用:https://stackoverflow.com/a/19246280/5863811
还有另一个关于网站是否使用硒错误的问题:https://stackoverflow.com/a/22753475/5863811