Selenium浏览器实例可以从不同的进程访问?

问题描述 投票:0回答:1

我目前要做的是以下的事情。在一个网站中,有一些不断变化的值(js驱动),我正在使用Selenium监控并保存到数据库中。这些值是通过无限循环,从使用Selenium的find_element找到的元素中读取的。

这在一个进程中可以正常工作。然而,当我试图对其进行多进程处理(同时监控多个值)时,如果不为每个进程打开一个单独的浏览器,似乎就没有办法做到这一点(这是不可行的,因为我们正在讨论接近60个不同的元素)。

我在多进程之前打开的浏览器似乎无法在各个进程中使用。即使我在多处理步骤之前找到了这些元素,我也无法将它们传递给进程,因为webelements无法被腌制。

是我做错了什么,是硒不适合这个工具,还是有其他方法?

下面的代码实际上并没有工作,它只是为了显示我目前的 "工作版本 "的结构。我需要摆脱的是在函数中打开浏览器,让我所有的进程都依赖一个浏览器。

import time
import datetime
import os
from selenium import webdriver
from multiprocessing import Pool

def sampling(value_ID):
    dir = os.path.dirname(__file__)

    driver = webdriver.Firefox(dir)
    driver.get("https:\\website.org")

    monitored_value = driver.find_element_by_xpath('value_ID')

    while(1):
            print(monitored_value.text)
            time.sleep(0.1)

value_array = [1,2,3,4,5,6]

if __name__ == '__main__':
    with Pool(6) as p:
        p.map(getSampleRT, value_array)
python selenium web-scraping
1个回答
0
投票

你可以查看 selenium抽象听者 如果你想捕捉元素的变化。通过实现一个监听器,你可以摆脱无限循环。这里有一个例子,我认为它可以为你工作。

class EventListeners(AbstractEventListener):
    def before_change_value_of(self, element, driver):
        # check if this is the element you are looking for
        # do your stuff
        print("element changed!")

driver_with_listeners = EventFiringWebDriver(driver, EventListeners()
# wait as much as you like while your listeners are working
driver_with_listeners.implicitly_wait(20000)

你也可以查看 此职位 以便更完整地实施。

© www.soinside.com 2019 - 2024. All rights reserved.