Python+selenium 实现自动化163邮箱登录并发送邮件

啊!终于写出来了,定位好久,终于都弄完了。但是有时候又发送不成功有时候又可以,不知道是我暂停时间太短,还是其他什么原因。记录一下吧~

定位时注意一下动态的iframe

'''
自动登录163邮箱,并发送邮件
'''
from selenium import webdriver
from time import sleep
import time

def login(email,password):
    
    iframe = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")    #使用Xpath提供的contains定位
    driver.switch_to.frame(iframe)    #切换到iframe
    driver.find_element_by_name('email').send_keys(email)
    driver.find_element_by_name('password').send_keys(password)
    # sleep(2)
    driver.find_element_by_id('dologin').click()
    sleep(1)

def sendeamil():
    login(email,password)
    sleep(2)
    driver.find_element_by_id('_mail_component_132_132').click()
    sleep(1)
    driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys(addressee)
    sleep(1)
    driver.find_element_by_xpath("//div[@class = 'bz0']/div/input[@class = 'nui-ipt-input']").send_keys(main)
    sleep(1)

    #切换到iframe界面
    driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@class,'APP-editor-iframe')]"))
    driver.find_element_by_xpath("/html/body").send_keys(content)
    sleep(1)
    driver.switch_to.default_content()    #退出iframe界面
    sleep(1)
    driver.find_element_by_id('_mail_button_2_239').click()


if __name__ == "__main__":
    driver = webdriver.Chrome()
    driver.maximize_window()    #窗口最大化
    # time.sleep(1)
    url = 'https://mail.163.com'
    driver.get(url)#不需要再加上引号了

    email = '用户名'            #输入邮箱用户名
    password = '密码'            #输入邮箱密码

    addressee = '收件人'        #输入收件人
  
    main = time.strftime('%Y-%m-%d',time.localtime(time.time()))    #输入邮件主题
    
    content = '今天是: ' + main    #输入邮件内容

    sendeamil()

 

### 回答1: 下面是实现自动登录带验证码的163邮箱发送邮件的一种方法: 首先,你需要安装以下库: ``` pip install selenium pip install pillow ``` 然后,你需要安装Chrome浏览器的驱动程序,并将其路径添加到系统环境变量中。 接下来,可以使用以下代码来实现自动登录: ``` from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from PIL import Image # 启动浏览器 browser = webdriver.Chrome() browser.get('http://mail.163.com/') # 等待5秒,给用户手动登录的机会 time.sleep(5) # 找到登录按钮,点击 login_button = browser.find_element_by_id('lbNormal') login_button.click() # 找到用户名输入框,并输入用户名 username = browser.find_element_by_name('email') username.send_keys('your_username') # 找到密码输入框,并输入密码 password = browser.find_element_by_name('password') password.send_keys('your_password') # 找到验证码图片,并保存到本地 verify_code_element = browser.find_element_by_id('vcodeImg') verify_code_location = verify_code_element.location verify_code_size = verify_code_element.size browser.save_screenshot('screenshot.png') x = verify_code_location['x'] y = verify_code_location['y'] width = verify_code_size['width'] height = verify_code_size['height'] # 截取验证码图片 im = Image.open('screenshot.png') im = im.crop((x, y, x + width, y + height)) im.save('verify_code.png') # 打开验证码图片,手动输入 ### 回答2: 要实现自动登录带验证码的163邮箱,并发送一封邮件给a.163.com,可以使用Pythonselenium库以及邮件发送库(如smtplib)来完成。 首先,需要安装相应的库,在命令行中输入以下命令: ``` pip install selenium pip install smtplib ``` 接下来,编写代码实现自动登录邮箱功能。首先,导入必要的库和模块: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time ``` 然后,初始化WebDriver并打开163邮箱登录页面: ```python driver = webdriver.Chrome() # 需要安装Chrome浏览器驱动 driver.get('https://mail.163.com/') ``` 找到登录框中的用户名和密码输入框,并输入相应的账号和密码: ```python driver.switch_to.frame(0) # 切换到iframe username = driver.find_element_by_name('email') password = driver.find_element_by_name('password') username.send_keys('your_username') # 替换为你的邮箱账号 password.send_keys('your_password') # 替换为你的邮箱密码 ``` 此时页面会弹出验证码窗口,为了自动化,我们可以手动输入验证码并点击登录,也可以使用OCR技术自动识别验证码,这里我们选择手动输入验证码的方法: ```python verification_code = input('请输入验证码:') driver.find_element_by_id('un-login').send_keys(Keys.ENTER) # 点击登录 ``` 等待一段时间,使页面完全加载,然后进入写信页面: ```python time.sleep(5) # 等待页面加载 driver.find_element_by_id('_mail_component_42_42').click() # 进入写信页 ``` 找到收件人输入框,输入收件人邮箱地址(a.163.com): ```python driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('a.163.com') ``` 接下来,我们需要填写邮件的主题和内容,并发送邮件: ```python driver.find_element_by_class_name('nui-ipt-input').send_keys('邮件主题') # 替换为你的邮件主题 time.sleep(2) # 等待邮件主题输入框失去焦点 driver.switch_to.frame(driver.find_element_by_class_name('APP-editor-iframe')) # 切换到内容输入的iframe driver.find_element_by_tag_name('body').send_keys('邮件内容') # 替换为你的邮件内容 driver.switch_to.default_content() # 切回主页面 driver.find_element_by_class_name('nui-toolbar-item-send').click() # 点击发送按钮 ``` 最后,关闭浏览器: ```python time.sleep(2) # 等待发送成功弹窗消失 driver.quit() ``` 以上就是使用Python实现自动登录带验证码的163邮箱,并发送一封邮件给a.163.com的代码。根据你的实际情况,需要进行相应的参数替换和验证步骤的修改。 ### 回答3: 要实现自动登录带验证码的163邮箱发送邮件给a.163.com,可以使用Pythonselenium库和smtplib库。以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time import smtplib from email.mime.text import MIMEText # 启动浏览器 driver = webdriver.Chrome() driver.get("https://mail.163.com") # 输入用户名和密码 username_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[name="username"]'))) username_input.send_keys("your_username") password_input = driver.find_element_by_css_selector('input[name="password"]') password_input.send_keys("your_password") # 等待用户输入验证码 time.sleep(30) # 点击登录按钮 login_button = driver.find_element_by_css_selector('a[data-action="login"]') login_button.click() # 等待登录成功 WebDriverWait(driver, 10).until(EC.title_contains("网易邮箱")) # 发送邮件 smtp_server = "smtp.163.com" sender_email = "your_email@163.com" receiver_email = "a@163.com" subject = "Test Email" message = "This is a test email." msg = MIMEText(message) msg["Subject"] = subject msg["From"] = sender_email msg["To"] = receiver_email smtp = smtplib.SMTP(smtp_server) smtp.login(sender_email, "your_email_password") smtp.sendmail(sender_email, receiver_email, msg.as_string()) smtp.quit() # 关闭浏览器 driver.quit() ``` 需要注意的是,此代码中的部分参数需要你自己填写,如邮箱用户名、密码、邮件内容和发件人邮箱密码等。另外,验证码需要人工输入,代码会自动等待30秒让你输入验证码并登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值