多处理和selenium,并行运行多个浏览器?

时间:2015-01-07 02:55:04

标签: python multithreading selenium multiprocessing threadpool

我目前有一个HTML页面,我通过Selenium打开并点击元素,填写表单并保存。

但这很慢,我真的想加快速度。 我想同时运行多个浏览器,为每个浏览器提供不同的xpaths点击。这可能吗?

截至目前,我有一个包含三个User对象的列表。我想为每个用户运行3个单独的selenium进程,这两个进程都访问同一个网页,但是点击不同的元素。我想同时这样做。

这是我的代码(不工作):

def main():
    pool = Pool(processes=4)
    pool.map(bookRooms, users)

...

def bookRooms(users):
    if not users:
        logging.error("No available times")
    else:
        driver = Browser('phantomjs')
        driver.visit(url)

        for user in users:
            for xpath in user.xpaths:

                driver.find_by_xpath(user.getXPath()).click()

                driver.find_by_xpath("id('save')").click()

                driver.find_by_name("username").fill(user.getUsername())

                driver.find_by_name("password").fill(user.getPassword())

                driver.find_by_name("submit").click()

        driver.close()

所以如果你想象我的列表看起来像这样:

[User1, User2, User3]

如何调用bookRooms()方法,使其并行运行:

bookRooms(User1)
bookRooms(User2)
bookRooms(User3)
...

基本上,分解列表并在每个元素上运行方法。 Selenium甚至能以这种方式工作吗?

谢谢

1 个答案:

答案 0 :(得分:-3)

我无法通过Selenium + Python找到有关多线程的任何内容,但以下Blog post描述了多处理 - 我可能会从那里开始。