【问题标题】:How to use webdriver as context manager如何使用 webdriver 作为上下文管理器
【发布时间】:2018-07-15 04:31:30
【问题描述】:

我正在尝试在 with 块内使用 ChromeDriver 以使代码看起来更好,并最终摆脱使用 driver.quit() 命令。但是,它似乎不起作用。浏览器一打开,就会抛出以下错误。也许,我做错了什么。没有办法吗?提前致谢。

这是我尝试过的:

from selenium import webdriver

with webdriver.Chrome() as wd:
    res = wd.get('https://stackoverflow.com/questions/')
    print(res.page_source)

#Another failure attempt with the same error

with webdriver.Chrome() as wd:
    wd.get('https://stackoverflow.com/questions/')
    print(wd.page_source)

这是我遇到的错误:

    with webdriver.Chrome() as wd:
AttributeError: __exit__

【问题讨论】:

  • 您尝试将webdriver.Chrome() 用作上下文管理器,但它不是上下文管理器。您可以查看this 以获取有关如何实现自己的上下文管理器的信息

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


【解决方案1】:

现在它已添加到 selenium (SeleniumHQ/selenium#5919),因此您可以简单地使用问题中的原始方法:

from selenium import webdriver

with webdriver.Chrome() as wd:
    res = wd.get('https://stackoverflow.com/questions/')
    print(res.page_source)

【讨论】:

    【解决方案2】:

    试试下面的解决方案,如果不是你想要的,请告诉我:

    from selenium import webdriver
    
    class WebDriver:
        def __init__(self, driver):
            self.driver = driver
    
        def __enter__(self):
            return self.driver
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            self.driver.quit()
    
    
    with WebDriver(webdriver.Chrome()) as wd:
        wd.get('https://stackoverflow.com/questions/')
        print(wd.page_source)
    

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多