针对网易企业邮箱,自动配置客户端授权全部邮件。
网易企业邮箱批量修改设置是一项面向实际任务的技能,主要用于使用 Selenium 4 自动化批量登录网易企业邮箱,修改客户端设置中的 SMTP 收件范围(改为"收取全部邮件")和客户端授权密码开关;本技能记录了从环境配置到脚本执行的全流程,以及开发过程中遇到的关键坑点和解决方案;
向用户索要账号文件,告知格式。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
使用 Selenium 4 自动化批量登录网易企业邮箱,修改客户端设置中的 SMTP 收件范围(改为"收取全部邮件")和客户端授权密码开关。本技能记录了从环境配置到脚本执行的全流程,以及开发过程中遇到的关键坑点和解决方案。
使用本技能前,必须先让用户提供账号 txt 文件。 没有账号文件脚本无法运行。
向用户索要账号文件,告知格式要求:
用户名,密码, 和中文逗号 ,# 开头的行会被跳过t@qiyevip163.com,Qazwsx@12 user2@qiyevip163.com,Password123
用户可以通过以下方式提供:
收到账号文件后,将其保存到工作目录下,默认文件名为 1.txt
确认环境就绪后再执行脚本(见下方"环境配置"和"运行命令"部分)
1.txt# 使用 managed Python 创建 venv "C:Usershuang.workbuddybinariespythonversions3.13.12python.exe" -m venv "C:Usershuang.workbuddybinariespythonenvsdefault" # 安装 selenium "C:Usershuang.workbuddybinariespythonenvsdefaultScriptspip.exe" install selenium
Selenium 4 内置的在线下载 ChromeDriver 在国内网络环境下经常失败。解决方案:
chromedriver/chromedriver-win64/ 下Service(executable_path=...) 指定本地路径chromedriver_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"chromedriver", "chromedriver-win64", "chromedriver.exe",
)
if os.path.exists(chromedriver_path):
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service, options=options)
else:
driver = webdriver.Chrome(options=options) # 回退到自动查找
1.txt,每行一个账号,格式 用户名,密码(支持中文逗号):
t@qiyevip163.com,Qazwsx@12 user2@qiyevip163.com,Password123
旧版 find_element_by_xpath 已废弃,必须使用新 API:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素可点击并点击
el = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='设置']")))
el.click()
# 安全查找(找不到返回 None)
try:
return WebDriverWait(driver, timeout).until(EC.presence_of_element_located(locator))
except (TimeoutException, NoSuchElementException):
return None
网易企业邮箱页面有以下关键特征:
#accname 和 #accpwdswitch_to.window(handles[-1])switch_to.default_content() 确保在主文档) 元素,但被样式化包裹直接点击样式化下拉框的选项无法触发网易页面的保存逻辑。必须操作底层原生 元素并派发 change 事件:
select_script = """
var section = arguments[0];
var select = section.querySelector('select');
if (!select) {
var parent = section.parentElement;
for (var i=0; i<5 && parent; i++) {
select = parent.querySelector('select');
if (select) break;
parent = parent.parentElement;
}
}
if (select) {
for (var i=0; i
4. 原生 alert 自动确认(关键)
修改 select 值并触发 change 事件后,网易页面会弹出原生 JavaScript alert("邮件客户端收取时间设置成功")。必须等待 alert 出现再 accept:
def _accept_modal(driver, timeout=10):
# 1. 等待原生 alert 出现(不能用 try/except 立即检测,alert 可能还没弹出)
try:
WebDriverWait(driver, timeout).until(EC.alert_is_present())
alert = driver.switch_to.alert
text = alert.text
alert.accept()
WebDriverWait(driver, timeout).until_not(EC.alert_is_present())
return text
except Exception:
pass
# 2. 兜底:尝试自定义 HTML 弹窗的"确定"按钮
try:
ok_btn = WebDriverWait(driver, timeout).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'确定')]"))
)
driver.execute_script("arguments[0].click();", ok_btn)
return "自定义弹窗-确定"
except Exception:
pass
return None
常见坑:之前用 try/except 立即检测 alert,因为 alert 还没弹出来就跳过了,导致修改实际没生效。必须用 WebDriverWait(driver, timeout).until(EC.alert_is_present()) 阻塞等待。
5. 失败原因追踪与日志记录
核心函数返回 tuple[bool, str],第二个元素为失败原因:
def login(driver, account) -> tuple[bool, str]:
...
return False, "登录超时,可能密码错误或遇到验证码"
def process_account(driver, account) -> tuple[bool, str]:
try:
ok, reason = login(driver, account)
if not ok:
return False, reason
...
except WebDriverException as e:
return False, f"浏览器异常: {type(e).__name__}: {str(e)[:100]}"
运行结束后,失败账号及原因写入 failed_accounts.log:
@dataclass
class RunStats:
failed_details: list = field(default_factory=list) # [(账号, 原因), ...]
def write_failure_log(self, file_path):
if not self.failed_details:
return
lines = [f"# 失败日志 — 生成时间 {timestamp}", f"# 共 {self.failed} 个账号失败", ""]
for i, (username, reason) in enumerate(self.failed_details, 1):
lines.append(f"{i}. 账号: {username}")
lines.append(f" 原因: {reason}")
lines.append("")
Path(file_path).write_text("n".join(lines), encoding="utf-8")
完整流程
0. 【前置】向用户索要账号 txt 文件,保存到工作目录为 1.txt
1. load_accounts() — 从 1.txt 读取账号列表
2. create_driver() — 创建 Chrome 实例,指定本地 chromedriver
3. 对每个账号:
a. login() — 登录网易企业邮箱
b. enter_mailbox() — 进入邮箱主界面
c. open_settings() — 打开设置 → 客户端设置(新窗口)
d. modify_settings():
- _select_dropdown_option("IMAP / SMTP") → 改为"收取全部邮件" + 确认弹窗
- _select_dropdown_option("POP / SMTP") → 改为"收取全部邮件" + 确认弹窗
- 检查并关闭客户端授权密码
e. driver.delete_all_cookies() — 清理状态
4. driver.quit()
5. 输出统计摘要 + 写入 failed_accounts.log
运行命令
# 基本运行(使用默认 1.txt)
"C:Usershuang.workbuddybinariespythonenvsdefaultScriptspython.exe" "py-网易邮箱批量修改设置脚本.py"
# 指定账号文件
"C:Usershuang.workbuddybinariespythonenvsdefaultScriptspython.exe" "py-网易邮箱批量修改设置脚本.py" --file accounts.txt
# 无头模式
"C:Usershuang.workbuddybinariespythonenvsdefaultScriptspython.exe" "py-网易邮箱批量修改设置脚本.py" --headless
踩坑记录
问题
原因
解决方案
Selenium 内置 chromedriver 下载失败
国内网络无法访问 googlechromelabs
从 npmmirror CDN 手动下载,指定本地路径
find_element_by_xpath 报错
Selenium 4 废弃旧 API
改用 find_element(By.XPATH, ...)
登录后找不到设置按钮
页面结构变化
改用文本匹配定位 + JavaScript 点击
点击"进入设置"后找不到元素
新窗口未切换
switch_to.window(handles[-1])
下拉框点击展开后选项找不到
chromedriver 对复杂 XPath 崩溃
改用 document.querySelectorAll
JavaScript 点击文本节点不触发选择
未操作底层 select
直接修改 select.selectedIndex + 派发 change 事件
修改后弹窗未确认
try/except 检测 alert 太快
WebDriverWait().until(EC.alert_is_present()) 阻塞等待
资源文件
scripts/
netease_mail_batch.py — 完整的可运行脚本,可直接复制使用或作为基础进行修改
references/
page_structure.md — 网易企业邮箱页面结构参考文档,记录各关键元素的定位方式
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.3万人学习
共49课时 | 82.7万人学习
最新文章