我公司会在系统错误或者重要监控数据的时候发邮件到个人邮箱,导致一段时间内邮箱上百页。小姐姐说谁先帮她删邮件,辣条君和昊然就跟谁去看电影。所以,打算写个小脚本,先用自己的账号试验一下吧~提示:本文仅供学习交流,请勿用于非法用途!!!1、需求分析这次我们需要删除QQ邮箱中的一些邮件。您只需要在我们公司的日志里查看所有的邮件,然后点击最上面的就可以彻底删除了。太简单。首先我们可以抓包,找到接口。既然涉及到登录,我打算用一个笨办法(还不是菜谱)让页面自己运行。使用硒。要使用这个库,首先需要将你的浏览器对应的驱动放入环境变量中。然后模拟操作,一步步写代码。2.撸起袖子写代码首先我们需要登录,我们使用账号和密码登录(所以我们知道小姐姐的QQ密码)。打开qq邮箱,qq推荐快捷登录,我们需要模拟点击转换按钮,选择账号密码登录方式。fromseleniumimportwebdriverdriver=webdriver.Chrome()#获取页面driver.get("https://mail.qq.com/")deflogin(qq,password):driver.switch_to.frame("login_frame")#可能如果driver.find_element_by_xpath('//*[@id="switcher_plogin"]'):driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()驱动程序,就会出现QQ快捷登录页面。find_element_by_xpath('//*[@id="u"]').send_keys(qq)driver.find_element_by_xpath('//*[@id="p"]').send_keys(密码)driver.find_element_by_xpath('//*[@id="login_button"]').click()我用的是谷歌浏览器,所以我用chrome()方法选择控件使用xpath,xpath路径直接从浏览器复制即可。登录后,点击左侧收件箱,进入邮件列表页面。这里需要注意一下,因为这个页面里面包含了frame,所以需要输入某个标签的frame,才能成功获取某个页面。一页上有25封电子邮件。我们用for循环查看是不是我们公司的日志,然后在多选框里打勾。然后点击最上方的DeleteCompletely,点击OK,然后会弹出一个Dialog提示删除成功,然后点击Cancel。#返回主页面driver.switch_to.default_content()#点击左侧收件箱按钮driver.find_element_by_xpath('//*[@id="folder_1"]').click()#进入listdriver的mainFrame。切换到。frame("mainFrame")#forloopthe25listsoneachpage,checkthetickforiinrange(1,26):try:span=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[3]/table/tbody/tr/td[1]/nobr/span'input=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[1]/input'ifdriver.find_element_by_xpath(span).text==del_text:driver.find_element_by_xpath(input).click()exceptexceptase:print(e.args)driver.find_element_by_xpath('//*[@id="quick_completelydel"]').click()#切换到弹框driver.switch_to.parent_frame()#点击确定删除driver.find_element_by_xpath('//*[@id="QMconfirm_QMDialog_confirm"]').click()#显示等待,等待取消按钮出现WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'QMconfirm_QMDialog_cancel')))driver.find_element_by_xpath('//*[@id="QMconfirm_QMDialog_cancel"]').click()del_text是我们公司log的四个字先用switch_to.default_content()进入主页面,然后点击收件箱按钮,然后跳转到邮件列表所在的framemainFrame。然后for循环看哪一个适合打勾。然后点击确定,删除成功提示按钮,这个过程需要切换框架。如果一切顺利,页面会自动刷新,然后我们就可以进行二次筛选和删除了。这里有一个问题,如果当前页面(或者第一页)没有我们公司的日志,你一直删的彻底,而当前页面的数据不变,那么后面的数据就不会全部删除了时间。所以我们需要记录当前需要跳转的页数,然后逐页跳转到可能有我们公司日志的页码。#需要重定向的页面need_turn_page=1defdelete(del_text):globalneed_turn_page#从第一页开始current_page=1#记下,这个页面有需要删除的邮件count=0#好像有是一些代码#跳转到当前页ifneed_turn_page>current_page:forpageinrange(1,need_turn_page):print("Ijumped")current_page=current_page+1driver.find_element_by_xpath('//*[@id="nextpage1"]').click()#forloopthe25listsoneachpage,checkthetickforiinrange(1,26):try:#seemstohavesomecodeifdriver.find_element_by_xpath(span).text==del_text:count=count+1driver.find_element_by_xpath(input).click()exceptExceptionase:print(e.args)ifcount>0:#seemstohavesomecodes#否则翻页else:need_turn_page=need_turn_page+13.完整代码'''QQ邮箱删除垃圾邮件'''fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWait来自selenium.webdriver.supportimportexpected_conditionsasECimporttimedriver=webdriver.Chrome()#需要翻页的页面need_turn_page=1#获取页面driver.get("https://mail.qq.com/")#logindeflogin(qq,password):driver.switch_to.frame("login_frame")#如果driver.find_element_by_xpath('//*[@id="switcher_plogin"]'):driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()driver.find_element_by_xpath('//*[@id="u"]').send_keys(qq)driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)driver.find_element_by_xpath('//*[@id="login_button"]').click()defdelete(del_text):globalneed_turn_page#从第一页开始current_page=1#阻止太快了,腾讯找我麻烦time.sleep(1)#记录一下,本页有需要删除的邮件count=0#返回主页面driver.switch_to.default_content()#点击左侧收件箱按钮driver.find_element_by_xpath('//*[@id="folder_1"]').click()#EnterthemainFrameofthelistdriver.switch_to.frame("mainFrame")#跳转到当前页面ifneed_turn_page>current_page:forpageinrange(1,need_turn_page):print("Ijumped")current_page=current_page+1driver.find_element_by_xpath('//*[@id="nextpage1"]').click()#每25个列表循环一次在一页上,检查范围(1,26)中的i:尝试:span=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[3]/table/tbody/tr/td[1]/nobr/span'input=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[1]/input'ifdriver.find_element_by_xpath(span).text==del_text:count=count+1driver.find_element_by_xpath(input).click()除了异常为e:print(e.args)ifcount>0:driver.find_element_by_xpath('//*[@id="quick_completelydel"]').click()#切换到弹框driver.switch_to.parent_frame()#点击确定删除driver.find_element_by_xpath('//*[@id="QMconfirm_QMDialog_confirm"]').click()#显示等待,等待取消按钮出现WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,'QMconfirm_QMDialog_cancel')))driver.find_element_by_xpath('//*[@id="QMconfirm_QMDialog_cancel"]').click()#否则翻页else:need_turn_page=need_turn_page+1if'__name__==__main__':login('yourqq','yourpassword')forpageinrange(1,126):delete('Ourcompany'slog')完了,好了,现在我要删小姐姐的邮件了而我的右手拍了拍座位,转了180度,“我要你”。嘿,他们在哪里???4.代码优化既然都走了,我还是先离开,默默优化代码吧。'''QQ邮箱删除垃圾邮件'''fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECimporttimedriver=webdriver.Chrome()#获取pagedriver.get("https://mail.qq.com/")#登录deflogin(qq,password):driver.switch_to.frame("login_frame")#驱动可能会出现QQ快捷登录页面。find_element_by_xpath('//*[@id="switcher_plogin"]'):driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()driver.find_element_by_xpath('//*[@id="u"]').send_keys(qq)driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)driver.find_element_by_xpath('//*[@id="login_button"]').click()defdelete(del_text):#防止太快,腾讯找我麻烦time.sleep(3)#做个记录,本页有需要删除的邮件count=0#forloop25ofeachpageAlist,检查tickforiinrange(1,26):try:span=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[3]/表/tbody/tr/td[1]/nobr/span'input=f'//*[@id="div_showbefore"]/table[{i}]/tbody/tr/td[1]/input'ifdriver.find_element_by_xpath(span).text==del_text:count=count+1driver.find_element_by_xpath(input).click()除了Exceptionase:print(e.args)print("count:"+str(count))ifcount>0:driver.find_element_by_xpath('//*[@id="quick_completelydel"]').click()#切换到弹框driver.switch_to.parent_frame()#点击确定删除driver.find_element_by_xpath('//*[@id="QMconfirm_QMDialog_confirm"]').click()#显示等待,等待取消按钮出现//*[@id="QMconfirm_QMDialog_cancel"]').click()exceptExceptionase:pass#否则翻页else:#返回主页面driver.switch_to.default_content()#进入mainF的列表ramedriver.switch_to.frame("mainFrame")WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,'nextpage1')))driver.find_element_by_xpath('//*[@id="nextpage1"]').click()if__name__=='__main__':login('你的qq','你的密码')WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,'folder_1')))#返回主页面driver.switch_to.default_content()#点击左侧收件箱按钮driver.find_element_by_xpath('//*[@id="folder_1"]').click()#进入listdriver的mainFrame.switch_to.frame("mainFrame")forpageinrange(1,126):delete('我们公司的日志')
