selenium与谷歌无头浏览器的应用

文章目录

  • 1.selenium的介绍
  • 2.selenium的安装
  • 3.selenium常用操作
      • 3.1 测试一下你的selenium
      • 3.2 获取页面元素
      • 3.3 节点交互操作
      • 3.4 获取网页的数据
      • 3.5 子页面
  • 4.使用selenium模拟登录qq空间
  • 5.谷歌无头浏览器

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)

你可能感兴趣的:(爬虫)