selenium中如何搭配使用open/input函数与send_keys方法实现密码批量登录?
Selenium 关联open函数和send_keys实现密码遍历登录方案
可以将open函数与send_keys搭配使用,你的需求完全可以实现,现有代码存在两处核心错误:
- 执行
password.send_keys(passwords)时,passwords变量还未定义,你把读取密码文件的逻辑写在了调用send_keys之后 - 没有添加遍历逻辑,现有代码只会尝试一次登录,无法循环读取所有密码进行尝试
修正后的完整实现代码
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from time import sleep # 第一步:提前读取密码列表,过滤空行、首尾空格,避免无效尝试 with open('C:/Users/user/Desktop/Python folder/python projects/passlist.txt', 'r', encoding='utf-8') as f: passwords = [line.strip() for line in f if line.strip()] # 第二步:提前定位页面元素,无需重复定位 username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']"))) password = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='password']"))) log_in_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))) # 填写固定用户名 username.clear() username.send_keys("myusername") # 第三步:遍历所有密码尝试登录 login_success = False for current_pwd in passwords: # 清空上一次输入的密码 password.clear() # 传入当前遍历到的密码 password.send_keys(current_pwd) sleep(1) # 点击登录按钮 log_in_btn.click() sleep(2) # 请在此处添加你自己的登录成功判断逻辑,示例逻辑仅供参考 # 示例:判断当前url是否包含登录后才有的路径,或页面是否出现登录成功提示 # if "welcome" in driver.page_source: # login_success = True # print(f"登录成功,有效密码为:{current_pwd}") # break # 若网站登录失败会刷新页面,需在此处重新定位密码输入框和提交按钮,避免元素失效报错 # password = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='password']"))) # log_in_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))) if not login_success: print("所有密码尝试完毕,未找到有效密码")
注意事项
- 必须添加登录成功的判断逻辑,否则程序会遍历完所有密码才停止,无法识别出正确密码
- 可根据目标网站的反爬策略调整等待时长,或替换为显式等待逻辑,避免操作过快被拦截
- 若需要支持用户手动输入密码,可将读取文件逻辑替换为
input()函数,再将拿到的内容传入send_keys()即可
内容的提问来源于stack exchange,提问作者3la24ever1
相关产品推荐
相关产品推荐

