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

Python Selenium读取账号文件触发ValueError错误求助

嘿,我帮你找出问题啦!

你遇到的ValueError: substring not found错误,核心问题出在账号文件的格式和你的代码逻辑不匹配:

  • 你的users.txt把三个账号全挤在同一行,用空格分隔;但你的代码默认每一行都是单独的email:password条目,这样处理起来就乱套了。
  • 就算第一次能找到第一个:分割出邮箱,后面的代码也会把第一个密码+其他所有账号的内容当成单个密码,而且如果文件里有空行或者格式不对的行,就会直接抛出找不到:的错误。
两种修复方案任你选

方案1:改文件格式(简单又不容易出错,推荐!)

把users.txt改成每个账号单独占一行,像这样:

g_santeusanio@arcor.de:sportpark13
mrtslabbert@absamail.co.za:oohethooq12313w
lauriecd@absamail.co.za:christcorem

然后调整你的代码,优化几个细节(比如清空输入框、自动关文件):

import time
from selenium import webdriver

# 初始化Chrome驱动(记得提前装对应版本的chromedriver哦)
driver = webdriver.Chrome()
# 替换成你的实际登录页面URL
driver.get("https://your-login-page.com")

# 用with语句打开文件,自动帮你关文件,不用手动写f.close()
with open('users.txt','r') as f:
    for line in f.readlines():
        # 去掉行首尾的空格和换行符
        clean_line = line.strip()
        # 跳过空行
        if not clean_line:
            continue
        # 跳过没有冒号的无效行
        if ':' not in clean_line:
            print(f"这行格式不对,跳过:{clean_line}")
            continue
        
        # 只分割第一个冒号,防止密码里有冒号的情况
        mail, password = clean_line.split(':', 1)
        
        print(f"正在登录账号:{mail}")
        
        # 先清空输入框再输入,避免之前的内容残留
        email_input = driver.find_element_by_xpath('//*[@id="email"]')
        email_input.clear()
        email_input.send_keys(mail)
        
        password_input = driver.find_element_by_xpath('//*[@id="password"]')
        password_input.clear()
        password_input.send_keys(password)
        
        # 点击登录按钮
        lgn_btn = driver.find_element_by_css_selector('#sign-in')
        lgn_btn.click()
        
        time.sleep(5)
        # 刷新页面准备下一次登录
        driver.refresh()

# 所有账号处理完,关闭浏览器
driver.quit()

方案2:改代码适配现有文件格式

如果不想动users.txt,那让代码先把一行里的多个账号拆出来再处理:

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://your-login-page.com")

with open('users.txt','r') as f:
    for line in f.readlines():
        clean_line = line.strip()
        if not clean_line:
            continue
        # 把一行按空格拆成多个账号,过滤掉空的条目
        accounts = [acc.strip() for acc in clean_line.split() if acc.strip()]
        # 逐个处理每个账号
        for acc in accounts:
            if ':' not in acc:
                print(f"这个账号格式不对,跳过:{acc}")
                continue
            mail, password = acc.split(':', 1)
            
            print(f"正在登录账号:{mail}")
            
            email_input = driver.find_element_by_xpath('//*[@id="email"]')
            email_input.clear()
            email_input.send_keys(mail)
            
            password_input = driver.find_element_by_xpath('//*[@id="password"]')
            password_input.clear()
            password_input.send_keys(password)
            
            lgn_btn = driver.find_element_by_css_selector('#sign-in')
            lgn_btn.click()
            
            time.sleep(5)
            driver.refresh()

driver.quit()
几个小提醒让你的代码更靠谱
  • 别随便修改循环里的line变量,容易搞混逻辑,像上面的代码那样用新变量存处理后的内容。
  • 输入内容前一定要调用clear(),不然上次的输入会和这次的叠加,比如邮箱变成xxx@xx.comyyy@yy.com,肯定登不上。
  • 用split(':', 1)而不是直接找索引,万一密码里有冒号也能正确分割。
  • 加上空行和无效行的判断,就算文件里不小心多了空行,代码也不会崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:36:20