硒创建多个浏览器会话

时间:2019-11-08 19:14:35

标签: python selenium webdriver

我想创建多个浏览器会话并使用不同的帐户登录。如果我使用下面的代码,它将满足我的要求,但是在for循环结束后关闭所有浏览器。我的猜测是,焦点消失后python将结束所有进程。我该如何解决这个问题?使用多线程? 我希望每个会话保持打开状态60秒。

def playroutine():
    index = 0
    for i in range(len(getlogindata())):
        username, password = givemelogin(index)
        index += 1
        driver = webdriver.Chrome('/Users/fb/Documents/chromedriver')  # Optional argument, if not specified will search path.
        driver.get('[...]')
        driver.find_element_by_name("username").send_keys(username)
        driver.find_element_by_name("password").send_keys(password)
        driver.find_element_by_id("login-button").click()
        time.sleep(2)
        driver.get('[...]')

谢谢:)

1 个答案:

答案 0 :(得分:0)

循环结束后,您将无法关闭所有浏览器,因为driver变量仅存在于for循环的上下文中。

但是,您可以一次关闭一个循环中的驱动程序:

def playroutine():
    index = 0
    for i in range(len(getlogindata())):
        username, password = givemelogin(index)
        index += 1
        driver = webdriver.Chrome('/Users/fb/Documents/chromedriver')  # Optional argument, if not specified will search path.
        driver.get('[...]')
        driver.find_element_by_name("username").send_keys(username)
        driver.find_element_by_name("password").send_keys(password)
        driver.find_element_by_id("login-button").click()
        time.sleep(2)

        # close the driver
        driver.close()
        driver.quit()

或者,您可以在列表中跟踪驱动程序,并尝试遍历它们并关闭它们-这有点hacky,我不能说我推荐它:

def playroutine():

    driver_list = []
    index = 0
    for i in range(len(getlogindata())):
        username, password = givemelogin(index)
        index += 1
        driver = webdriver.Chrome('/Users/fb/Documents/chromedriver')  # Optional argument, if not specified will search path.

        # add this driver to your list to keep track of it
        driver_list.append(driver)

        driver.get('[...]')
        driver.find_element_by_name("username").send_keys(username)
        driver.find_element_by_name("password").send_keys(password)
        driver.find_element_by_id("login-button").click()
        time.sleep(2)
        driver.get('[...]')

    # for loop is finished -- close all drivers
    for driver in driver_list:
        driver.close()
        driver.quit()