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()报错怎么办?

3 回复

错误信息发上来


遇到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("备用定位也失败了")

# 继续填写主题和正文...

关键点:

  1. 等待机制:用WebDriverWait等输入框完全加载
  2. 定位方式:163邮箱常用CSS_SELECTOR: "input.nui-editableAddr-ipt"XPATH: "//input[@placeholder='收件人地址']"
  3. 清空输入框:先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

回到顶部