Python批量修改网页端邮箱设置

这篇博客分享了如何使用Python的selenium库自动化登录腾讯企业邮箱,并批量设置用户邮箱的客户端设置,包括定位元素、选择下拉列表值、模拟用户操作等步骤。作者还解决了在操作过程中遇到的定位问题和退出账号时清空输入框的难题,并提供了读取Excel数据的解决方案。
摘要由CSDN通过智能技术生成

前两天基础架构的同事遇到个问题,需要批量设置集团用户的邮箱设置,但是手工一个个操作实在是费时间,于是我就想到了用python来解决。

需求描述:登录腾讯企业邮箱
在这里插入图片描述
点击设置
在这里插入图片描述
点击客户端设置

在这里插入图片描述
收取选项设置为全部后,保存更改
在这里插入图片描述
点击右上角的退出
在这里插入图片描述
账号、密码保存在excel文件里。

解决方法:使用selenium包来操作网页,实现批量修改

遇到的问题点:

1、定位网页中的元素位置

定位“设置”时我使用的find_element_by_xpath,很容易找到了元素
在这里插入图片描述

qqmail.find_element_by_xpath('/html/body/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/span[3]/a[2]').click()#定位语句去源码中找

定位“客户端设置”时遇到了点麻烦,本来也想用xpath,但是一直失败,后来搜了搜资料,发现可以先定位到form,然后再模糊查询
在这里插入图片描述

    #点击客户端设置
    qqmail.switch_to.frame("mainFrame")
    qqmail.find_element_by_partial_link_text("客户端设置").click()#定位语句去源码中找

2、设置下拉列表的值

这个值的设置找了好多资料,最后用selenium的select解决的

from selenium.webdriver.support.select import Select

在这里插入图片描述


    #设置默认期限
    val = qqmail.find_element_by_id("poprecent")
    Select(val).select_by_value("65535")

3、点退出当前账号后清空原输入框中的账号记录

这个位置我试了好几个方法,包括双击输入框,发现双击输入框也不好用,因为账号是有@xxx.com后缀的,双击会只选择前半部分。其实是我想复杂了,只要执行单击输入框,再清空就可以了

    eleacct = qqmail.find_element_by_xpath("//*[@id='inputuin']")
    eleacct.click()#点击这个文本框
    ActionChains(qqmail).double_click(eleacct).perform()
    eleacct.clear()

4、数据源就不是问题了,用xlwings,读取文件里的账号和密码两列数据,放进数组表即可

5、我用的是chrome,用这个浏览器的话,需要下载一个chromedriver放在python.exe所在的文件夹。chromedriver的版本需要与chrome的版本一致

示例代码如下:

from selenium import webdriver
import time,keyboard
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
import os
import xlrd
import xlwings as wx

def login(qqmail,name,pwd):
    print("当前登录账户"+name)
    qqmail.find_element_by_xpath('/html/body/div[1]/div[2]/div/form/div[3]/div[3]/a[1]').click()#定位语句去源码中找
    time.sleep(1)#延时加载
    
    #找到登录框,输入账号密码
    eleacct = qqmail.find_element_by_xpath("//*[@id='inputuin']")
    eleacct.click()#点击这个文本框
    ActionChains(qqmail).double_click(eleacct).perform()
    eleacct.clear()
    qqmail.find_element_by_xpath("//*[@id='inputuin']").send_keys(name)
    qqmail.find_element_by_xpath("//*[@id='pp']").clear()
    qqmail.find_element_by_xpath("//*[@id='pp']").send_keys(pwd)

    #模拟点击登录
    qqmail.find_element_by_xpath("//*[@id='btlogin']").click()
    time.sleep(1)

    #点击设置
    try:
        qqmail.find_element_by_xpath('/html/body/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/span[3]/a[2]').click()#定位语句去源码中找
        time.sleep(1)#延时加载
    except:
        # 打印异常信息
        print("当前登录账户异常"+name)
        pass

    #点击客户端设置
    qqmail.switch_to.frame("mainFrame")
    qqmail.find_element_by_partial_link_text("客户端设置").click()#定位语句去源码中找
    time.sleep(1)#延时加载

    #设置默认期限
    val = qqmail.find_element_by_id("poprecent")
    Select(val).select_by_value("65535")
    time.sleep(1)#延时加载

    #点击保存
    qqmail.find_element_by_partial_link_text("保存更改").click()#定位语句去源码中找
    time.sleep(1)#延时加载

    #退出FORM
    qqmail.switch_to.default_content()
    time.sleep(1)#延时加载

    #点击退出
    qqmail.find_element_by_partial_link_text("退出").click()#定位语句去源码中找
    time.sleep(1)#延时加载
    
def open_file(filename,list_id):
    app = wx.App(visible=False, add_book=False) # 不打开baiexcel
    print("开始处理"+filename)
    wb = app.books.open(filename)

    sheet = wb.sheets[0]
    # 获取有值的最大行数和列数
    nrows = sheet.used_range.last_cell.row

    for row in range(2,nrows+1):
        name = str(sheet.range((row,1)).value)
        pwd = str(sheet.range((row,2)).value)
        acct=[name,pwd]
        list_id.append(acct)

    wb.close()
    app.quit()
    
def main():
    file_name = input('输入文件:') # 文件夹位置
    list_id = []
    try:
        qqmail = webdriver.Chrome()
        qqmail.get('https://exmail.qq.com/login')
        qqmail.maximize_window()
        time.sleep(2)

        open_file(file_name,list_id)
        print(list_id)
        for acct in list_id:
            qqmail.refresh() 
            login(qqmail,acct[0],acct[1])

        qqmail.quit()

    except Exception as  e:
        # 打印异常信息
        print(e)

if __name__=='__main__':
    main()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值