起因:邮件被误删,需要恢复,但是得很傻的需要自己一个一个点 恢复,此时就想到了自动化来实现。
学会使用工具 Selenium (一个极为强大且广泛使用的工具),掌握Selenium基础操作。
模块 | 链接 | 作用 |
---|---|---|
selenium | https://www.selenium.dev/zh-cn/documentation/ | 支持 web 浏览器自动化的一系列工具和库的综合项目 |
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
def init_driver(options=None) -> webdriver.Chrome:
"""
初始化浏览器驱动.
Args:
options(Options): chrome配置选项
Returns:
driver(WebDriver): 浏览器驱动对象
"""
return webdriver.Chrome(
service=ChromeService(ChromeDriverManager().install()),
options=options
)
###
对其中的解释,可参阅https://peps.python.org/pep-3107/
上述的代码,selenium 和urlib的版本都是最新的,才需要用到service的代码行。(可参考上一篇笔记)。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
wd = webdriver.Chrome(chrome_options=options, executable_path=r'c:\chromedriver\chromedriver.exe')
在爬网页时,用到最多的是各元素的xpath和网页代码。
优势:确保任务在特定条件满足时执行,提高任务的稳定性和可靠性。
作用:适用于等待页面的特定条件满足,如元素可见或可点击。
应用场景:处理动态加载的页面内容。
注意事项:在需要等待特定条件满足时使用显式等待。设置合理的等待时间,以避免任务失败或效率低下。
wd.get("url")
wd.find_element_by_link_text("其他方式登录").click()
wd.implicitly_wait(3)
xpath_element_value = wd.find_element_by_xpath('//*[@id="loginForm"]/div[3]/div[2]/div[1]/div[3]/a[4]')
xpath_element_value.click()
xpath_element_value = wd.find_element_by_xpath('//*[@id="inputuin"]').send_keys('')
xpath_element_value = wd.find_element_by_xpath('//*[@id="pp"]').send_keys(" ")
wd.implicitly_wait(1)
xpath_element_value = wd.find_element_by_xpath('//*[@id="btlogin"]').click()
wd.implicitly_wait(1)
xpath_element_value = wd.find_element_by_xpath('//*[@id="SetInfo"]/div[1]/a[1]').click()
wd.implicitly_wait(2)
##import time
time.sleep(10)
登录网页之后,则需要对mainFrame 有个认识,我开始还是一直在寻找xpath的方式。
## Need read iframe html
wd.switch_to.frame('mainFrame')
xpath_element_value = wd.find_element_by_xpath('/html/body/table/tbody/tr/td[5]/a/b').click()
逻辑分析上:
对邮件恢复进行循环处理。(此时在for 和while 进行选择)
active = True
while active:
try:
wd.implicitly_wait(5)
xpath_element_value = wd.find_element_by_xpath('//*[@id="div_data"]/div[2]/table/tbody/tr[4]/td[4]/a').click()
wd.implicitly_wait(1)
# element_by_id = wd.find_element_by_id("QMconfirm_s_confirm")
# element_by_id.click()
whandle = wd.window_handles[0]
wd.switch_to.window(whandle)
xpath_element_value = wd.find_element_by_xpath('//*[@id="QMconfirm_s_confirm"]')
xpath_element_value.click()
time.sleep(3)
wd.switch_to.frame('mainFrame')
except:
# print(xpath_element_value)
active = False
wd.quit()
需要爬出 所恢复出来的邮件的时间,发件人和主题,求指导。