2017-02-23 115 views
1

我有一个要求,我正在运行一个硒脚本,在机器上打开2个Firefox实例。我想在同时截取两个实例的截图。同一时间部分很重要。同时截图Xvfb多个显示器

我用以下步骤来模拟这样的:使用Xvfb -ac :99 and Xvfb -ac :100

  • 我有2个Python脚本,其分别设置环境变量DISPLAY至99和100

    1. 入门2不同的显示器。

    下面是Python脚本: screenshot99.py

    #!/usr/bin/env python 
    
    from pyvirtualdisplay import Display 
    from selenium import webdriver 
    import os 
    
    os.environ['DISPLAY'] = ':99' 
    
    display = Display(visible=0, size=(800, 600)) 
    display.start() 
    
    browser = webdriver.Firefox() 
    browser.get('http://www.test.com') 
    browser.quit() 
    
    display.stop() 
    

    screenshot100.py

    #!/usr/bin/env python 
    
    from pyvirtualdisplay import Display 
    from selenium import webdriver 
    import os 
    
    os.environ['DISPLAY'] = ':100' 
    
    display = Display(visible=0, size=(800, 600)) 
    display.start() 
    
    browser = webdriver.Firefox() 
    browser.get('http://www.test.com') 
    browser.quit() 
    
    display.stop() 
    

    我有2个问题:

    1. 是否可以在同时截取2个不同的浏览器实例截图?
    2. 如果是,我该如何模拟?我只需要一个概念验证来证明上述事实。
  • +0

    可以叉两个进程或线程在接收到信号后会截取屏幕截图,而马父母进程发送信号。见例如[这里](http://stackoverflow.com/questions/27463626/make-a-thread-wait-for-either-a-timer-or-a-signal)。 – reinierpost

    回答

    1

    你可以创建一个bash文件来告诉在后台产生两个进程,这可以保证你并发但不是并行。

    python screenshot99.py & 
    python screenshot100.py & 
    

    你可以做的是使用multiprocessing模块来创建一个旋转门的锁 -

    编辑 - 我应该指定甚至这样也不能保证并行,但这更接近。如果需要,您必须指定要运行的CPU。

    from multiprocessing import Process, Value 
    import time 
    
    def f(i, counter): 
        counter.value += 1 
        while counter.value != 2 : 
         print 'aquiring...' 
        #### CRITICAL SECTION #### 
        # spawn your script here using the os module or 
        # just write the code in here 
        print int(round(time.time() * 1000)), i 
        #### CRITICAL SECTION END #### 
    
    if __name__ == '__main__': 
        counter = Value('i', 0) 
        for num in range(2): 
         Process(target=f, args=(num, counter)).start() 
    

    结果 -

    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    aquiring... 
    1487866323038 0 
    1487866323038 1 
    

    我重复该多次(只显示的时间) -

    1487866388886 0 
    1487866388886 1 
    

    再次 -

    1487866398492 0 
    1487866398492 1 
    
    +0

    谢谢。我不明白产卵的部分。生成哪个脚本? bash脚本? – skjindal93

    +0

    你的'screenshot.py'文件。 [或者直接写代码] – hashcode55

    +0

    只有当你可以同时访问同一个显示端口时,这才能工作。如果没有,我不认为它有可能保证并行性。在这种情况下,您必须使用bash脚本解决方案。 – hashcode55

    相关问题