2017-02-23 116 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

    相關問題