注意:

    • xpath的提取不够熟练;
    • 有时候抱获取不到元素的错误,要考虑iframe,同时还要考虑是否进入到了iframe,可能上一个点击事件后,还在缓存,元素都还没有加载出来的;
    • 此案例需手动拖动验证码; ```python from selenium import webdriver from configparser import ConfigParser 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 import time import csv

    class QQ(object): def init(self, username, password): self.driver = webdriver.Chrome() self.url = “https://mail.qq.com/“ self.username = username self.password = password self.mail_list = [[“序号”, “发送人”, “主题”, “发送内容”, “发送时间”]] self.num = 0

    1. def login(self):
    2. self.driver.get(self.url)
    3. login_frame = self.driver.find_element_by_id("login_frame")
    4. self.driver.switch_to.frame(login_frame)
    5. self.driver.find_element_by_id("switcher_plogin").click()
    6. self.driver.find_element_by_id("u").send_keys(self.username)
    7. self.driver.find_element_by_id("p").send_keys(self.password)
    8. self.driver.find_element_by_id("login_button").click()
    9. def parse_mail(self):
    10. element = WebDriverWait(self.driver, 10).until(
    11. EC.presence_of_element_located((By.ID, "readmailbtn_link"))
    12. )
    13. self.driver.find_element_by_id("readmailbtn_link").click()
    14. time.sleep(1)
    15. mainFrame = self.driver.find_element_by_id("mainFrame")
    16. self.driver.switch_to.frame(mainFrame)
    17. trs = self.driver.find_elements_by_xpath('//div[@id="div_showbefore"]/table/tbody/tr/td[@class="l"]//tr')
    18. for tr in trs:
    19. self.num += 1
    20. mail = tr.find_elements_by_xpath("td")
    21. sender = mail[0].text
    22. title = mail[2].text.strip().split("-")[0]
    23. content = mail[2].text.strip().split("-")[1]
    24. sender_time = mail[3].text
    25. self.mail_list.append([self.num, sender, title, content, sender_time])
    26. print("{} sender{} title{} content{} sender_time{}".format(self.num, sender, title, content, sender_time))
    27. def save_mail(self):
    28. with open("qq邮件.csv", "w", newline="") as f:
    29. csv_writer = csv.writer(f)
    30. csv_writer.writerows(self.mail_list)
    31. def run(self):
    32. # 1、登入
    33. self.login()
    34. # 2、获取邮件
    35. self.parse_mail()
    36. # 3、保存邮件
    37. self.save_mail()
    38. # 4、退出浏览器
    39. self.driver.quit()

    def get_userdata(): cfg = ConfigParser() cfg.read(“userdata.ini”) username = cfg.get(“username”, “username”) password = cfg.get(“password”, “password”) return username, password

    if name == “main“: username, password = get_userdata() qq = QQ(username, password) qq.run() ```