黑马程序员技术交流社区
标题: 长沙黑马Python公开课:Selenium突破腾讯反爬机制轻松获取私... [打印本页]
作者: 长沙-小知姐姐 时间: 2020-4-27 17:25
标题: 长沙黑马Python公开课:Selenium突破腾讯反爬机制轻松获取私...
需要视频及源码笔记等资料可以回贴获取网盘密码(如失效请联系vx:csheima7)
[hide=d100]pn05[/hide]
# 需求:
# 1. 自动的打开浏览器,然后访问百度
# 2. 在百度的搜索框输入黑马程序员
# 3. 点击搜索按钮
import time
from selenium import webdriver
# 1. 自动的打开浏览器,然后访问百度
# 1.1 实例化一个浏览器对象
driver = webdriver.Chrome()
# 1.2 访问百度
driver.get('https://www.baidu.com')
# 2. 在百度的搜索框输入黑马程序员
# 2.1 找到搜索输入框
keyword_input = driver.find_element_by_id('kw')
# 2.2 在输入框中输入黑马程序员
keyword_input.send_keys('黑马程序员')
# 3. 点击搜索按钮
# 3.1 找到百度以下的输入框
search_btn = driver.find_element_by_id('su')
# 3.2 点击1下
search_btn.click()
# 4. 退出浏览器
# 4.1 让程序暂停5秒钟
time.sleep(5)
# 4.2 关闭整个浏览器
# 需求:
# 爬取私人QQ邮件
# 1. 登录
# 2. 爬取
from selenium import webdriver
from selenium.webdriver import ActionChains
# 登录
driver = webdriver.Chrome()
driver.get('https://mail.qq.com/')
# 隐式等待:出来了就不等了,没出来就一直等下去,超过10秒,就会抛出
driver.implicitly_wait(10)
# 2. 点击账号密码登录按钮
# 2.1 切换到子页面子iframe
login_frame = driver.find_element_by_id('login_frame')
driver.switch_to.frame(login_frame)
# 2.2 点击按钮
username_and_password_btn = driver.find_element_by_id('switcher_plogin')
username_and_password_btn.click()
# 3. 输入用户名和密码
# 3.1 找到用户名的输入框 id的属性是u,并输入用户名
driver.find_element_by_id('u').send_keys('782555894')
# 3.2 找到密码的输入框, id的属性是p,并输入密码
# driver.find_element_by_id('p').send_keys('你们的qq的密码')
from settings import PASSWORD
driver.find_element_by_id('p').send_keys(PASSWORD)
# 4. 点击登录按钮
driver.find_element_by_id('login_button').click()
# 5. 找到收件箱的按钮并点击
# 5.1 回到默认页面
driver.switch_to.default_content()
# 5.2 找到收件箱的按钮并点击
driver.find_element_by_id('folder_1_td').click()
# 6. 找到邮件列表所有的邮件
# 6.1 切换到子页面
main_frame = driver.find_element_by_id('mainFrame')
driver.switch_to.frame(main_frame)
# 6.2 获取所有的邮件
email_list = driver.find_elements_by_css_selector('table.M, table.F')
# for email in email_list:
# print(email.text)
# 6.3 得到当前邮件的数量 N次
email_count = len(email_list)
# 6.4 循环N次查看邮件的行为
# 6.4.1 存储当前的Tab页
handle = driver.current_window_handle
# 6.4.2 关闭无用的Tab页
no_use_handle = driver.window_handles[1]
driver.switch_to.window(no_use_handle)
driver.close()
driver.switch_to.window(handle)
main_frame = driver.find_element_by_id('mainFrame')
driver.switch_to.frame(main_frame)
for i in range(email_count):
# 6.4.1 找到当前第i + 1个邮件
email_ele = driver.find_elements_by_css_selector('.toarea .F, .toarea .M')
# 6.4.2 右击该邮件
# 右击某元素
# ActionChains(浏览器对象).context_click(你需要右击的对象).perform()
ActionChains(driver).context_click(email_ele).perform()
# 6.4.3 选择在新窗口打开
# 思路:找到点击按钮的列表中第2个对象
driver.find_elements_by_class_name('menu_item')[1].click()
# 6.4.4 切换到第2个Tab页
email_handle = driver.window_handles[1]
driver.switch_to.window(email_handle)
# 6.4.5 获取当前页面的邮件内容
main_frame = driver.find_element_by_id('mainFrame')
driver.switch_to.frame(main_frame)
container = driver.find_element_by_id('mailContentContainer')
print(container.text)
# 6.4.6 关闭第2个Tab页
driver.close()
# 6.4.7 切换回第1个Tab页
driver.switch_to.window(handle)
# 6.4.8 切换回第1个Tab页的子页面
main_frame = driver.find_element_by_id('mainFrame')
driver.switch_to.frame(main_frame)
driver.quit()
driver.quit()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |