我写了两个脚本:一个使用requests
,另一个使用selenium
。
当我执行第一个脚本时,我看到它从不打印任何内容,因为当出现错误时它无法通过此行res = requests.get(link)
,因此打印从未发生。但是,在硒的情况下,我会得到不同的行为。我知道我提供了无效的链接,但仍然可以看到print("Executing: " + driver.current_url)
这行产生的结果?
当硒脚本到达此行driver.get(link)
时,无论提供了无效的URL或没有有效的响应还是根本没有URL,如何停止硒脚本?
第一个脚本(行为正确):
import requests
link = "httppss://www.google.com/search?q=selenium"
res = requests.get(link) #error thrown here just as expected
print("Executing: " + res.url)
第二个脚本(当出现抛出错误时运行平稳):
from selenium import webdriver
link = "httppss://www.google.com/search?q=selenium"
driver = webdriver.Chrome()
driver.get(link) #expected any error to be thrown here
print("Executing: " + driver.current_url)
driver.quit()
答案 0 :(得分:2)
InvalidSchema
是特定于requests
的异常。 requests
仅支持HTTP
和HTTPS
协议,并且get_adapter
方法检查URL模式是否在['HTTP', 'HTTPS']
列表中。如果没有,则引发InvalidSchema
异常...
Selenium没有这样的无效的架构处理程序,因此(如预期的那样)在您想要使用"httppss"
您当然可以在本地更新selenium.common.exceptions
模块,因此它将包含
class InvalidSchemaException(WebDriverException):
"""Raises if URL-schema is not supported"""
pass
将导入添加到webdriver
模块:
from selenium.common.exceptions import (InvalidArgumentException,
WebDriverException, InvalidSchemaException)
from urllib.parse import urlparse
并将get
修改为
def get(self, url):
"""
Loads a web page in the current browser session.
"""
schema = urlparse(url).scheme
if scheme.upper() not in ['HTTP', 'HTTPS']:
raise InvalidSchemaException('Schema "%s" is not supported' % scheme)
self.execute(Command.GET, {'url': url})
但这只是一种解决方法,仅当您确实需要
时,才可以使用此方法