目的:爬取QQ邮件发件人、时间、内容等信息
注意问题
1.注意修改qq账号和密码
#3.输入账号密码
u = browser.find_element_by_id('u')
u.send_keys('')#---------------此处填QQ号
p = browser.find_element_by_id('p')
p.send_keys('')#----------------此处填QQ邮箱密码
2.注意自己是否有验证密码,如果没有则删除
#5.设置验证密码
browser.switch_to.default_content()
ap = browser.find_element_by_name('pp').send_keys('x86712526')
browser.find_element_by_id('btlogin').click()
3.注意自己的chromedriver的加载位置
browser = webdriver.Chrome(executable_path="/chromedriver")
细节处理
这里在邮件打开位置是选择新开一个tab页面,然后跳到那个页面进行爬取,获取信息完毕后再跳回原来的页面,这么做的原因是因为如果你在原来的页面进行操作,很容易出现indexError,具体在这里不细讲,可以自己尝试后来感受这个道理
完整代码
from selenium import webdriver
from selenium.webdriver import ActionChains
#1.打开登陆页面
browser = webdriver.Chrome(executable_path="/chromedriver")
browser.implicitly_wait(10)
browser.get('https://mail.qq.com/')
#2.切换到账号密码登陆
login_frame = browser.find_element_by_id('login_frame')
browser.switch_to.frame(login_frame)
browser.find_element_by_id('switcher_plogin').click()
#3.输入账号密码
u = browser.find_element_by_id('u')
u.send_keys('')#---------------此处填QQ号
p = browser.find_element_by_id('p')
p.send_keys('')#----------------此处填QQ邮箱密码
#4.点击登陆按钮
browser.find_element_by_id('login_button').click()
#5.设置验证密码
browser.switch_to.default_content()
ap = browser.find_element_by_name('pp').send_keys('')#----------------此处填QQ邮箱验证密码
browser.find_element_by_id('btlogin').click()
#5.点击收信
browser.find_element_by_id('folder_1').click()
#6.切换到收信iframe框架里
main_frame = browser.find_element_by_id('mainFrame')
browser.switch_to.frame(main_frame)
#这里选取新开一个网页的原因:防止因为刷新后,原来页面元素找不到,所以建议使用下面的方法
#获取第一个tab页
h = browser.current_window_handle
#通过css选择器,找到我们邮件列表里面的内容
email_eles = browser.find_elements_by_css_selector('.toarea .F, .toarea .M')
for i in range(len(email_eles)):
#获取邮件列表的邮件项
email_ele = browser.find_elements_by_css_selector('.toarea .F, .toarea .M')[i]
#右击邮件项
ActionChains(browser).context_click(email_ele).perform()
#然后选择在新窗口打开
browser.find_elements_by_css_selector('.menu_item')[1].click()
#切换到邮件详情页tab
email_detail_handle = browser.window_handles[1]
browser.switch_to.window(email_detail_handle)
#切换到内容部分
main_frame = browser.find_element_by_id('mainFrame')
browser.switch_to.frame(main_frame)
#获取具体的信息
try:
send_title = browser.find_elements_by_css_selector('.sub_title')[0].text
send_author = browser.find_elements_by_css_selector('.grn')[1].text
send_time = browser.find_elements_by_css_selector('#local-time-caption')[0].text
content = browser.find_elements_by_css_selector('#mailContentContainer')[0].text
print([send_title, send_author, send_time, content])
except IndexError:
print('该元素无法读取!')
pass
#关闭tab页
browser.close()
#回到第一个tab页,即邮件列表tab
browser.switch_to.window(h)
#又切换到列表部分
main_frame = browser.find_element_by_id('mainFrame')
browser.switch_to.frame(main_frame)
browser.quit()