动态渲染页面爬取 ---Selenium的使用

Selenium 的使用

Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript 动态渲染的页面来说,此种抓取方式非常有效。

好处:不用再分析网站复杂的通信流程了

坏处:效率低

一般用在登录环节。

1、准备工作

安装Chrome浏览器

配置ChromeDriver 

另外安装Python的Selenium库

2、基本使用

Selenium一些功能,示例如下:

from selenium import webdriver        #用来驱动浏览器驱动
from selenium.webdriver import ActionChains    #滑动验证码的时候用。拖拽滑动验证码进行移动
from selenium.webdriver.common.by import By    #指定查找的方式  提交请求的过程当中,定位到页面中某一个标签。比如输入,就要找到输入的标签,往输入标签丢一些值给它,
from selenium.webdriver.common.keys import Keys   #键盘操作,比如回车操作
from selenium.webdriver.support import expected_conditions as EC  #跟WebDriverWait连在一起用
from selenium.webdriver.support.wait import WebDriverWait      #跟EC连在一起用  等页面加载

程序运行关掉了,浏览器也要关掉,不然后台会运行一堆浏览器。

也有可能用驱动发起请求的时候遇到错误了,出错可能在某一行抛异常了,就执行不到关掉浏览器的那行代码。所以try把爬取的逻辑放到里面去。示例如下:

from selenium import webdriver        #用来驱动浏览器驱动

import time

 brower = webdriver.Chrome()





 try:
     brower.get('https://baidu.com')

     time.sleep(6)

 finally:
     brower.close()

基本使用演示:

from selenium import webdriver        #用来驱动浏览器驱动
from selenium.webdriver import ActionChains    #滑动验证码的时候用。拖拽滑动验证码进行移动
from selenium.webdriver.common.by import By    #指定查找的方式  提交请求的过程当中,定位到页面中某一个标签。比如输入,就要找到输入的标签,往输入标签丢一些值给它,
from selenium.webdriver.common.keys import Keys   #键盘操作,比如回车操作
from selenium.webdriver.support import expected_conditions as EC  #跟WebDriverWait连在一起用
from selenium.webdriver.support.wait import WebDriverWait      #跟EC连在一起用  等页面加载


import time

browser = webdriver.Chrome()


try:
    wait = WebDriverWait(browser,4)   #
    #发请求
    browser.get('https://baidu.com')
    #获取输入框
    input_tag = wait.until(EC.presence_of_element_located((By.ID,'kw')))
    #输入内容
    input_tag.send_keys('种花')
    #键盘操作回车
    input_tag.send_keys(Keys.ENTER)
    time.sleep(6)

finally:
    browser.close()

运行代码后发现,会自动弹出一个Chrome浏览器。浏览器首先会跳到百度,然后在搜索框中输入种花,接着跳转到搜索结果页,如图

在控制台分别会输出当前的URL、当前的Cookies和网页源代码,然后发现跟浏览器中的一模一样。

    print(browser.current_url)
    print(browser.get_cookies())
    print(browser.page_source)

所以说,如果用Selenium 来驱动浏览器加载网页的话,就可以直接拿到JavaScript渲染的效果了,不用担心使用的什么加密系统。

下面来详细介绍Selenium 的用法:

3、声明浏览器对象

Selenium 支持非常多的浏览器。如Chrome,Firefox,Edge等,还有Android,BlackBerry等手机端的浏览器。另外还支持无界面浏览器PhantomJS。

此外,我们可以用如下方式初始化:

from selenium import webdriver
browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() browser=webdriver.Safari() browser=webdriver.Edge() 

这样就完成了浏览器对象的初始化并将其赋值为browser对象。接下来,我们要做的就是调用browser对象,让其执行各个动作以模拟浏览器操作。

4、访问页面

5、查找节点

6、节点交互

7、动作链

8、执行JavaScript

9、获取节点信息

10、切换Frame

11、延时等待

12、前进和后退

13、Cookies

14、选项卡管理

15、异常处理

猜你喜欢

转载自www.cnblogs.com/zhangrenguo/p/10497597.html