You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python+Selenium多线程后台处理异常:后台驱动无法并行执行

问题:Selenium多线程后台运行时无法处理数据,仅前台正常

尝试用Python结合Selenium实现多线程自动登录网站并填写表单,为每个用户名分配独立的浏览器驱动。但驱动在后台并行启动后无法处理数据,只有前台打开时才能正常运行,导致必须等待一个任务完成后再处理下一个,流程被大幅拖慢。因保密原因无法提供网站URL,以下是相关代码:

导入依赖

import undetected_chromedriver as uc
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException,ElementClickInterceptedException,TimeoutException
from threading import Thread
import time
import pandas as pd 

Chrome配置选项

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--enable-javascript')
chrome_options.add_argument('--disable-gpu')
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15'
chrome_options.add_argument('User-Agent={0}'.format(user_agent))
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', True)

核心函数

def login_hbd(driver,username,password):
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.NAME,"username")))
    
    username_field = driver.find_element(By.NAME,"username")
    username_field.send_keys(username)

    password_field = driver.find_element(By.NAME,"password")
    password_field.send_keys(password)
    
    submit_btn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "submitBtn")))

    driver.execute_script("arguments[0].click();", submit_btn)
    
def get_ss_hbd(driver,username_list,password_list):
    while True:
        try:
            login_hbd(driver,str(username_list),password_list)
            WebDriverWait(driver, 1).until(EC.visibility_of_element_located((By.XPATH,"/html/body/div[1]/div/div/header/div/div[3]/nav/ul/li[7]/a")))
            driver.get("*****")
            driver.save_screenshot(f"{username_list}.png")         
            driver.close()
            break

        except (NoSuchElementException,ElementClickInterceptedException,TimeoutException):
            continue

多线程执行代码

# 获取开始时间
st = time.time()
number_of_threads = len(df)
threads = []

for _ in range(number_of_threads):
    username_list = df.loc[_][0]
    password_list = df.loc[_][1]
    driver = uc.Chrome(chrome_options=chrome_options,service_args=['--quiet'])
    driver.get("****")
    t = Thread(target=get_ss_hbd, args=(driver,username_list,password_list)) 
    t.start()
    threads.append(t)

for t in threads:
    t.join()
et = time.time()

# 计算执行时间
elapsed_time = et - st
print('Execution time:', elapsed_time, 'seconds')

内容的提问来源于stack exchange,提问作者Omar Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:25:21