1.selenium的介绍selenium是一个web自动化测试用的框架. 程序员可以通过代码实现对浏览器的控制, 比如打开网页, 点击网页中的元素, 实现鼠标滚动等操作. 它支持多款浏览器, 如谷歌浏览器, 火狐浏览器等等, 当然也支持无头浏览器.
使用selenium的目的 在爬取数据的过程中, 经常遇到动态数据加载, 一般动态数据加载有两种, 一种通过ajax请求加载数据, 另一种通过js代码加载动态数据. selenium可以模拟人操作真实浏览器, 获取加载完成的页面数据 ajax: url有规律且未加密, 直接构建url连接请求 url加密过无法破解规律 --> selenium js动态数据加载 --> selenium
2.selenium的安装安装三要素: 浏览器、驱动程序、selenium框架 浏览器: 推荐谷歌浏览器, 标准稳定版本 推荐谷歌的理由是因为谷歌好用, 并且大多数程序员都在用
驱动程序: 下载地址 驱动程序的下载版本需要和谷歌的版本一致, 前三位一致即可(例:76.0.3809)
框架: 自己搭建即可 以上完成后直接在控制台输入: pip install selenium 3.selenium常用操作常用操作有很多种, 比如: 获取页面元素、输入内容、点击、退出… ↓ 3.1 测试一下你的selenium# 从selenium中导入驱动程序
from selenium import webdriver
# 实例化浏览器对象
browser = webdriver.Chrome('driverpath')
# 发送get请求:
browser.get('https://www.baidu.com')
dirverpath: 驱动的存储路径, 可以直接将驱动放在当前脚本所在的文件夹, 如果放在本地文件夹还是无法执行, 那就将驱动放在谷歌浏览器的Application文件夹当中, 并指明路径
3.2 获取页面元素find_element_by_id(): 根据元素的id获取元素
find_element_by_name(): 根据元素的name获取元素
find_element_by_xpath(): 根据xpath表达式获取元素
find_element_by_class_name(): 根据class的值
find_element_by_css_selector(): 根据css选择器
3.3 节点交互操作click(): 点击
send_keys(): 输入内容
clear(): 清空操作
execute_script(js代码): 执行指定的js代码
quit(): 退出浏览器
列举一段自己常用的js代码: window.scrollTo(0, document.body.scrollHeight) 可以模拟鼠标滚动一屏高度
3.4 获取网页的数据browser.page_source: 获取网页的源码, str类型
3.5 子页面# 如果一个页面是有嵌套关系的话, 可以使用frame进入指定的页面, 例如QQ空间
switch_to.frame('frame')
4.使用selenium模拟登录qq空间import time
from selenium import webdriver
# 此处driverpath需要存放自己下载驱动的路径
browser = webdriver.Chrome(r'driverpath')
# 获取QQ空间的url, 并发送请求
url = 'https://qzone.qq.com/'
browser.get(url)
# qq空间使用的是组建嵌套,登录要先选择进入到子页面
browser.switch_to.frame('login_frame')
# 获取账号密码登录连接的id, 然后点击账号密码登录
a_tag = browser.find_element_by_id('switcher_plogin')
a_tag.click()
# 在下面会多次用到sleep让休眠几秒钟, 目的就是避免访问过快造成被误认为脚本
time.sleep(2)
# 获取账号文本框并输入账号
user = browser.find_element_by_id('u')
user.send_keys('自己的QQ账号')
time.sleep(2)
# 获取密码框并写入密码
pwd = browser.find_element_by_id('p')
pwd.send_keys('自己的QQ密码')
time.sleep(2)
# 获取登录按钮并点击
button = browser.find_element_by_id('login_button')
button.click()
5.谷歌无头浏览器from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 实例化Options对象
chrome_options = Options()
# 增加一个参数, 告诉浏览器是无头浏览器
chrome_options.add_argument('--headless')
# 增加一个参数, 告诉浏览器不需要使用GPU渲染
chrome_options.add_argument('--disable-gpu')
# 驱动路径, 谷歌的驱动存放路径
path = r'driverpath'
# 实例化浏览器对象
browser = webdriver.Chrome(executable_path=path, options=chrome_options)
# 打开指定的页面
browser.get('https://www.baidu.com')
# 打印访问页面的源码
print(browser.page_source)
# 将页面源码写入到文件当中
with open('bai_du.html', 'w', encoding='utf-8') as f:
f.write(browser.page_source)
|