Python中使用Selenium登录163邮箱并自动发送邮件,在跳转到收件人地址页面时使用send_keys()报错怎么办?
from selenium import webdriver import time,sys from selenium.webdriver.common.keys import Keys
#打开浏览器登陆邮箱 browser = webdriver.Chrome() browser.get('https://mail.163.com/') time.sleep(2) browser.switch_to.frame("x-URS-iframe") browser.find_element_by_name("email").clear() browser.find_element_by_name("email").send_keys('[email protected]') browser.find_element_by_name("password").clear() browser.find_element_by_name("password").send_keys('hdsgsdjhgjfdg') browser.find_element_by_id("dologin").click() time.sleep(10)
#点击发送 browser.switch_to.default_content() sendselem = browser.find_element_by_css_selector("#_mail_component_68_68").click() time.sleep(3)
#输入接收人邮箱地址 browser.find_element_by_xpath('//*[@id="_mail_emailtips_0_234"]').send_keys('dadasdsad') #一到上面一行就报错,求大神指导指导
Python中使用Selenium登录163邮箱并自动发送邮件,在跳转到收件人地址页面时使用send_keys()报错怎么办?
错误信息发上来
遇到send_keys()报错,通常是元素定位时机或方式不对。163邮箱的收件人输入框可能需要等待或使用特定的定位方式。试试这个代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
driver = webdriver.Chrome()
driver.get("https://mail.163.com")
# 先登录(这里需要你补充自己的登录代码)
# ...
# 点击写信按钮
write_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//*[text()='写 信']"))
)
write_btn.click()
try:
# 关键:等待收件人输入框出现并可用
recipient_input = WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input.nui-editableAddr-ipt"))
)
# 清空可能存在的默认内容
recipient_input.clear()
# 输入收件人
recipient_input.send_keys("recipient@example.com")
print("收件人输入成功")
except TimeoutException:
print("找不到收件人输入框,可能页面结构变了")
# 可以尝试备用定位方式
try:
recipient_input = driver.find_element(By.XPATH, "//input[@placeholder='收件人地址']")
recipient_input.send_keys("recipient@example.com")
except:
print("备用定位也失败了")
# 继续填写主题和正文...
关键点:
- 等待机制:用
WebDriverWait等输入框完全加载 - 定位方式:163邮箱常用
CSS_SELECTOR: "input.nui-editableAddr-ipt"或XPATH: "//input[@placeholder='收件人地址']" - 清空输入框:先
clear()再输入,避免残留内容
如果还不行,可能是iframe问题。163邮箱写信区域可能在iframe里,需要先切换:
# 切换到iframe
iframe = driver.find_element(By.XPATH, "//iframe[contains(@id, 'iframe')]")
driver.switch_to.frame(iframe)
# 然后再定位收件人输入框
建议: 用浏览器开发者工具检查元素的实际属性和结构。
把详细的错误信息贴出来,看是不是被网易邮箱屏蔽了
若被服务器屏蔽了,可以考虑使用代理 Ip 来爬取
Selenium + Firefox + Python 代码示例:
https://github.com/mimvp/mimvp-proxy-demo/tree/master/SeleniumPython

