如果使用无效的URL方案,Selenium不会抛出异常

时间:2018-12-31 09:04:14

标签: python python-3.x selenium selenium-webdriver web-scraping

我写了两个脚本:一个使用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()

1 个答案:

答案 0 :(得分:2)

InvalidSchema是特定于requests的异常。 requests仅支持HTTPHTTPS协议,并且get_adapter方法检查URL模式是否在['HTTP', 'HTTPS']列表中。如果没有,则引发InvalidSchema异常...

Selenium没有这样的无效的架构处理程序,因此(如预期的那样)在您想要使用"httppss"

的架构获取URL时不会引发异常

您当然可以在本地更新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})

但这只是一种解决方法,仅当您确实需要

时,才可以使用此方法