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
相关产品推荐
相关产品推荐

