selenium模块

1、selenlum介绍

selenium这个三方库,最初是一个自动化测试工具,能够实现让浏览器完成自动化的操做。
selenium本质是经过驱动浏览器,彻底模拟浏览器的操做,好比跳转、输入、点击、下拉等,来拿到网页渲染以后的结果,可支持多种浏览器。
而爬虫中使用它主要是为了解决requests没法直接执行JavaScript代码的问题。html

官方文档:Selenium with Pythonpython

2、环境搭建

一、安装selenum

$ pip3 install selenium

二、获取浏览器的驱动程序

三、获取浏览器驱动示例

(1)查看浏览器版本

Chrome——>关于Google Chromeweb

Google浏览器版本

(2)下载浏览器对应的驱动程序

查看chrome和chromedriver的对应关系,我应该下载 70.0.3538.110 版本对应的chromedriver驱动。chrome

在谷歌浏览器驱动下载地址下载驱动:macos

浏览器驱动下载

我选择MAC版本的驱动下载,解压后,将文件chromedriver拷贝到项目目录下。api

3、编码流程

from selenium import webdriver
from time import sleep

# 建立一个浏览器对象executable_path驱动的路径
bro = webdriver.Chrome(executable_path='./chromedriver')
# get方法能够指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')

sleep(1)  # 等待打开页面

# 让百度进行指定词条的一个搜索
text = bro.find_element_by_id('kw')   # 定位到text搜索文本框
text.send_keys('人民币')   # send_keys表示向文本框中录入指定内容

sleep(1)  # 等待文本输入

# 点击搜索按钮
button = bro.find_element_by_id('su')
button.click()   # click表示点击操做

sleep(3)   # 等待查询结果

# 关闭浏览器
bro.quit()

一、自动测试软件控制浏览器

(1)执行以下代码:

from selenium import webdriver

# 建立一个浏览器对象executable_path驱动的路径
bro = webdriver.Chrome(executable_path='./chromedriver')
# get方法能够指定一个url,让浏览器进行请求
bro.get('https://www.baidu.com')

(2)效果以下所示:

自动打开浏览器并进入百度页面:浏览器

自动控制浏览器

二、查找指定的元素进行操做的方法

find_element_by_id            # 根据id找节点
find_elements_by_name         # 根据name找
find_elements_by_xpath        # 根据xpath查找
find_elements_by_tag_name     # 根据标签名找
find_elements_by_class_name   # 根据class名字查找

4、phantomJS

phantomJS是一款基于无界面的浏览器。其自动化操做流程和上述操做谷歌浏览器是一致的。
因为是无界面的(没法观察自动化过程),为了可以展现自动化操做流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。函数

一、获取无界面浏览器驱动程序

PhantomJS下载连接工具

我是MAC OS系统,所以下载MAC OS系统的PhantomJS驱动。下载zip压缩包后,解压文件,找到文件:phantomjs-2.1.1-macosx/bin/phantomjs。学习

二、phantomJS代码演示

from selenium import webdriver
import time

browser = webdriver.PhantomJS(executable_path='/Users/hqs/phantomjs-2.1.1-macosx/bin/phantomjs')

# 打开浏览器
browser.get('http://www.baidu.com')
time.sleep(2)

# 截屏
browser.save_screenshot(r'./baidu.png')

# 查找input输入框
text = browser.find_element_by_id('kw')   # 定位到了text文本框
text.send_keys('美女')  # send_keys表示向文本框中录入指定内容
time.sleep(1)

# 再次截屏
browser.save_screenshot(r'./meinv.png')

browser.quit()

代码执行后,会建立出三个文件:baidu.png、meinv.png和ghostdriver.log。
baidu.png:

baidu图片

meinv.png:

meinv图片

三、使用selenium + phantomJS处理页面动态加载数据的爬取

selenium+phantomjs 就是爬虫终极解决方案:有些网站上的内容信息是经过动态加载js造成的,因此使用普通爬虫程序没法回去动态加载的js内容。例如豆瓣电影中的电影信息是经过下拉操做动态加载更多的电影信息。

from selenium import webdriver
from time import sleep

# 建立无界面的浏览器对象
browser = webdriver.PhantomJS(executable_path='/Users/hqs/phantomjs-2.1.1-macosx/bin/phantomjs')
url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action='
# 打开浏览器
browser.get(url)
sleep(1)

# 截屏
browser.save_screenshot('./1.png')

# 编写js代码:让页面中的滚轮向下滑动(到底部)
js = 'window.scrollTo(0, document.body.scrollHeight)'   # 水平方向不动,拖动到底部

# 让浏览器对象执行js代码
browser.execute_script(js)
sleep(1)

# 截屏(2)
browser.save_screenshot('./2.png')  # 获取了更多的页面

# 获取加载数据后的页面
# page_source获取浏览器当前的页面数据
page_text = browser.page_source     # 页面源码更多

(1)需求示例

获取豆瓣电影中动态加载出更多的电影详情数据。

(2)拖动到底部的js

拖动底部

5、扩展学习网址

selenium官网
selenium模块

相关文章
相关标签/搜索