李威159 2022-05-11 09:55 采纳率: 40%
浏览 104
已结题

python selenium webDriverWait 在多线程情况下失效一问

各位好我有个问题想要询问
我使用python selenium thread模拟10个等同开启十个浏览页(webDriver)
但是发现在这个代码下
我第一个webDriver按下了按钮1
但是第二个第三个页面还没有点击按钮1
但是好像由于第一个通过了按钮1的那段代码
后面二,三个webDriver都会跳过点击按钮1这步直接到检查按钮2元素的地方(webDriverWait)
報告錯誤
消息:沒有這樣的元素:無法找到元素:{"method":"xpath","selector":"//*[@id="btn"]/div/div[2]/div[1]/div [6]/div"}
大概就是因为第2,3个页面还没点击按钮跳转到下一页所以找不到元素
所以导致他TimeOut报错跳出
请问我该如何处理这个问题
麻烦了 感谢

from datetime import datetime
from selenium import webdriver
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
import threading

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(10):
        t = threading.Thread(target=selenium_mult)
        t.start()

  • 写回答

1条回答 默认 最新

  • ~白+黑 Python领域新星创作者 2022-05-11 10:08
    关注

    用selenium的显示等待,等待到需要点击元素刷新出来,再执行下一步操作

    显示等待要用到WebDriverWait

    from selenium.webdriver.support.wait import WebDriverWait

    配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx检查一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月11日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!