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

Python Threading多用户登录异常:仅完成2个登录需修复

修复多线程批量登录仅执行2个用户的问题

原代码核心问题

  1. 仅固定创建2个线程(Page_Thread = 2),只处理CSV中前2个用户,未遍历所有账号
  2. 线程传参格式错误:args={i} 应为元组格式 (i,),否则会导致参数解析异常
  3. 主线程未等待子线程完成:t.join 缺少括号,应改为t.join(),否则主线程会直接结束
  4. 异常处理过于宽泛,且未在异常时关闭浏览器驱动,易残留无用进程
  5. ChromeOptions的--app参数格式错误(正确格式为--app=URL),且重复调用driver.get属于冗余操作

修复后的完整代码

import threading
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, WebDriverException
import time
from csv import reader

def Login_browser(user_data):
    id_str, id_pass = user_data
    print(f"Login Id: {id_str}")
    print(f"Login Password: {id_pass}")

    options = webdriver.ChromeOptions()
    # 可根据需求保留或移除--app参数,修正格式为--app=目标网址
    # options.add_argument('--app=http://localhost/login2/index.php')
    driver = webdriver.Chrome(options=options)

    try:
        driver.get('http://localhost/login2/index.php')
        time.sleep(1)

        email_field = driver.find_element_by_name("userid")
        email_field.send_keys(id_str)
        time.sleep(3)

        password_field = driver.find_element_by_name("pass")
        password_field.send_keys(id_pass)
        time.sleep(3)

        submit = driver.find_element_by_xpath("/html/body/center/form/table/tbody/tr[3]/td/button[1]")
        submit.click()
        time.sleep(30)

    except (NoSuchElementException, WebDriverException) as e:
        print(f"登录{id_str}失败: {str(e)}")
        time.sleep(10)
    finally:
        # 无论成功失败都确保关闭驱动,避免资源泄漏
        driver.quit()

if __name__ == "__main__":
    threads = []

    with open('user.csv', 'r') as read_obj:
        csv_reader = reader(read_obj)
        ids_pass_list = list(csv_reader)

    # 为CSV中每个用户创建独立线程
    for user in ids_pass_list:
        thread = threading.Thread(target=Login_browser, args=(user,))
        threads.append(thread)

    # 启动所有线程
    for t in threads:
        t.start()

    # 等待所有线程执行完成
    for t in threads:
        t.join()

    print('success')

额外优化点

  • 移除全局变量依赖,直接将用户账号密码作为参数传入线程函数
  • 捕获具体异常类型,便于精准排查问题
  • 使用finally块确保浏览器驱动一定会被关闭,避免进程残留
  • 格式化打印日志,提升可读性

内容的提问来源于stack exchange,提问作者OSCAR A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:40:36