iT邦幫忙

0

請教python selenium chrome多開能夠同步做一樣的動作嗎

  • 分享至 

  • xImage

各位大哥好我想請教個問題
我在使用selenium多開瀏覽器(不同chrome視窗多個),
但每個網頁加載的時間盡不相同
所以操作下一步時每個開始的時間不一樣
我想問能不能讓前面做完某步的瀏覽器等全部瀏覽器跑完再一起進行下一步
ex: 第一個網頁點完按鈕1,等待2,3...n個瀏覽器都點完按鈕,全部瀏覽器再執行點下一個按鈕2的動作。
這是我目前的代碼(不會等待)

from datetime import datetime
from selenium import webdriver
import threading
from multiprocessing import Queue
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
 
def selenium_mult():
    chrome_options = Options()
    chrome_options.add_argument("--headless") 
    ser=Service('./chromedriver')
    driver = webdriver.Chrome(service = ser,options=chrome_options)
    driver.set_window_size(540,480)
    driver.get('https:/website') 
 
    WebDriverWait(driver,10,1).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="btn"]/div/div[3]/button[1]'))) 
    driver.find_element(By.XPATH, '//*[@id="btn"]/div/div[3]/button[1]').click()  #click button 1
    Ftime = datetime.now()
 
    WebDriverWait(driver,30,1).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="btn"]/div/div[2]/div[1]/div[6]/div'))) 
    driver.find_element(By.XPATH, '//*[@id="btn"]/div/div[2]/div[1]/div[6]/div').click() #click button 2
 
if __name__ == '__main__':
    for i in range(5):
        t = threading.Thread(target=selenium_mult)
        t.start()
    
 
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

【**此則訊息已被站方移除**】
0
熊熊工程師
iT邦研究生 1 級 ‧ 2022-05-06 17:47:09

可以用 thread 把你要先放下去跑的 function 先放下去跑,然後設定等待 thread 內的工作做完再往下執行

看更多先前的回應...收起先前的回應...
lou14 iT邦新手 5 級 ‧ 2022-05-09 09:25:38 檢舉

不好意思
這個我不太理解
可以麻煩您舉個例子嗎
我對於thread有些陌生/images/emoticon/emoticon02.gif

lou14 iT邦新手 5 級 ‧ 2022-05-09 09:27:07 檢舉

也不好意思 今天才回覆

Thread 的話,可以參考看看 這篇文章

https://ithelp.ithome.com.tw/upload/images/20220509/20144024BUdWA9eXzb.jpg

當初看到你文章的想法是這樣,不太確定可不可行,就多試試看吧,不然利用下面有人提到 until 的部分應該也可以完成,應該每開一個 driver 都可以設法取得該 driver 的 id 之類的,這樣就可以用 id 來進行全部東西的等待啥的,可以往這個方向找找看

lou14 iT邦新手 5 級 ‧ 2022-05-09 14:03:34 檢舉

好的 感謝您
我來試試看

0
win895564
iT邦新手 1 級 ‧ 2022-05-07 10:15:26

我覺得你既然都會寫until了
應該從這個地方著手
Implicit Waits
Explicit Waits
你可以朝這兩個部分去看一下
看網頁哪個元素載入時間會慢點

lou14 iT邦新手 5 級 ‧ 2022-05-09 09:29:46 檢舉

在單個頁面上這個方法是適用的
但是如果因為我是多開他還是會有每個時間載入完頁面的差異點
所以不知道這個做法也是否通用於不同頁面等待
因為照現在個做法的話 如果是抓網頁元素來等
如果第一個網站符合條件他不就還是會獨自往下跑
而其他還在loading的還是被卡住
我不知道我理解有沒有錯誤
還多請指點

我要發表回答

立即登入回答