【问题标题】:How can I start a webdriver instance in flask server and use it globally如何在烧瓶服务器中启动 webdriver 实例并在全局范围内使用它
【发布时间】:2021-05-13 12:50:16
【问题描述】:

我有这个函数,我希望它在烧瓶应用程序的主函数中被调用,并希望将它传递给另一个类。这里的问题是我只想在启动服务器时创建一次实例,并且必须将它全局传递给所有类

def webdriver_instance():
    from selenium import webdriver
    from selenium.webdriver import FirefoxOptions
    opts = FirefoxOptions()
    opts.add_argument("--headless")
    opts.add_argument("start-maximized")
    opts.add_argument("disable-infobars")
    opts.add_argument("--disable-extensions")
    opts.add_argument('--no-sandbox')
    opts.add_argument('--disable-application-cache')
    opts.add_argument('--disable-gpu')
    opts.add_argument("--disable-dev-shm-usage")
    browser = webdriver.Firefox(firefox_options=opts)

    return browser

【问题讨论】:

    标签: python-3.x selenium flask selenium-chromedriver


    【解决方案1】:

    您正在寻找重用 selenium 会话。您可以启动一次浏览器并将会话 ID 和执行程序 url 存储在某处并在需要时获取它:

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    executor_url = driver.command_executor._url
    session_id = driver.session_id
    driver.get("http://tarunlalwani.com")
    
    print session_id
    print executor_url
    
    def create_driver_session(session_id, executor_url):
        from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
    
        # Save the original function, so we can revert our patch
        org_command_execute = RemoteWebDriver.execute
    
        def new_command_execute(self, command, params=None):
            if command == "newSession":
                # Mock the response
                return {'success': 0, 'value': None, 'sessionId': session_id}
            else:
                return org_command_execute(self, command, params)
    
        # Patch the function before creating the driver object
        RemoteWebDriver.execute = new_command_execute
    
        new_driver = webdriver.Remote(command_executor=executor_url, desired_capabilities={})
        new_driver.session_id = session_id
    
        # Replace the patched function with original function
        RemoteWebDriver.execute = org_command_execute
    
        return new_driver
    
    driver2 = create_driver_session(session_id, executor_url)
    print driver2.current_url
    

    来源:https://tarunlalwani.com/post/reusing-existing-browser-session-selenium/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-17
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多