爬虫-Selenium

Selenium+Browser强大的组合拳去攻破反爬机制;
Selenium是自动化测试的主流框架
Selenium-IDE可以实现QTP的操作

Browser Driver

浏览器的驱动程序,用于驱动浏览器响应程序代码
驱动下载

Safari - 不需要装驱动,只需要在菜单栏中开发选项中打开允许远程自动化即可。

phantomjs

  1. 定义 :无界面浏览器(无头浏览器)
  2. 特点
  • 把网站加载到内存执行,运行高效0

Phantomjs 已经被Selenium废弃。请使用无头浏览器替代,详见下面的chromedriver 设置无界面模式
Selenium support for PhantomJS has been deprecated, please use headless

Selenium

  1. 定义 :Web自动化测试工具,应用于Web自动化测试
  2. 特点
    1. 根据指定命令操作浏览器,让浏览器自动加载页面
    2. 只是工具,不支持浏览器功能,只能与第三方浏览器结合使用
  3. 安装
    1
    2
    3
    Windows cmd :python -m pip install selenium
    Anconda prompt : conda install selenium
    Ubuntu : sudo pip3 install selenium

使用

浏览器对象(browser)方法

1
2
3
4
5
6
7
8
9
10
# 创建浏览器对象
browser = webdriver.Chrome(executable_path='path')
# 访问网站
browser.get(url)
# 查看响应内容
browser.page_source
# 从html源码中搜索指定字符串,没有找到返回:-1
browser.page_source.find('字符串')
# 关闭浏览器
browser.quit()

定位节点

单元素查找(1个节点对象)

1
2
3
4
browser.find_element_by_id('')
browser.find_element_by_name('')
browser.find_element_by_class_name('')
browser.find_element_by_xpath('')

多元素查找([节点对象列表])

1
2
3
4
browser.find_elements_by_id('')
browser.find_elements_by_name('')
browser.find_elements_by_class_name('')
browser.find_elements_by_xpath('')

节点对象操作

1
2
3
4
5
6
7
8
# 搜索框发送内容
ele.send_keys('')
# 模拟点击
ele.click()
# 获取文本内容
ele.text
# 获取属性值
ele.get_attribute('src')

输入设备操作

键盘操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')
# 1、在搜索框中输入"selenium"
browser.find_element_by_id('kw').send_keys('selenium')
# 2、输入空格
browser.find_element_by_id('kw').send_keys(Keys.SPACE)
# 3、Ctrl+a 模拟全选
browser.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
# 4、Ctrl+c 模拟复制
browser.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c')
# 5、Ctrl+v 模拟粘贴
browser.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')
# 6、输入回车,代替 搜索 按钮
browser.find_element_by_id('kw').send_keys(Keys.ENTER)

鼠标操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 导入鼠标事件类
from selenium.webdriver import ActionChains
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

# 找到设置节点
element = browser.find_element_by_xpath('//*[@id="u1"]/a[8]')

# 把鼠标移动到 设置 节点,move_to_element()
actions = ActionChains(browser)
actions.move_to_element(element)
actions.perform()

time.sleep(1)

# 找到高级设置节点,并点击
browser.find_element_by_link_text('高级搜索').click()

chromedriver设置无界面模式

1
2
3
4
5
6
7
from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.headless = True
browser = webdriver.Chrome(options=options)
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')

简易效果展示

使用 Selenium + 浏览器 ; 打开百度搜索Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

# 向搜索框(id kw)输入 Python
ele = browser.find_element_by_xpath('//*[@id="kw"]')
ele.send_keys('Python')

time.sleep(1)
# 点击 百度一下 按钮(id su)
su = browser.find_element_by_xpath('//*[@id="su"]')
su.click()

# 截图
browser.save_screenshot('Python.png')
# 关闭浏览器
browser.quit()