如何使用WebDriver作为上下文管理器

SIM*_*SIM 5 python selenium web-scraping python-3.x selenium-webdriver

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

这是我尝试过的:

from selenium import webdriver

with webdriver.Chrome() as wd:
    res = wd.get('/sf/')
    print(res.page_source)

#Another failure attempt with the same error

with webdriver.Chrome() as wd:
    wd.get('/sf/')
    print(wd.page_source)
Run Code Online (Sandbox Code Playgroud)

这是我遇到的错误:

    with webdriver.Chrome() as wd:
AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

And*_*son 8

尝试以下解决方案,如果不是您想要的,请告诉我:

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('/sf/')
    print(wd.page_source)
Run Code Online (Sandbox Code Playgroud)


小智 6

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

from selenium import webdriver

with webdriver.Chrome() as wd:
    res = wd.get('/sf/')
    print(res.page_source)
Run Code Online (Sandbox Code Playgroud)

  • 感谢@Ankor让我更新新闻。 (2认同)