各位大哥好我想請教個問題
我在使用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()
可以用 thread 把你要先放下去跑的 function 先放下去跑,然後設定等待 thread 內的工作做完再往下執行
我覺得你既然都會寫until了
應該從這個地方著手
Implicit Waits
Explicit Waits
你可以朝這兩個部分去看一下
看網頁哪個元素載入時間會慢點