Selenium-网络数据采集工具库-初学篇

库介绍

Selenium是一个强大的网络数据采集工具(http://www.seleniumhq.org/),最初是为网站自动化测试而开发,同时也它们也可以运行在浏览器上。在Python中应用功能主要如下:

  • 让浏览器自动加载页面
  • 获取浏览器网页加载的数据
  • 页面截屏
  • 判断网站上某些动作是否发生

项目环境

操作系统:win10

python版本:3.6

解析器:pycharm2018

Selenium文档:

使用流程

一、下载并安装selenium库

1、通过PyPI网站(https://pypi.python.org/simple/selenium/)下载

2、通过三方管理器pip下载:

$ pip install selenium

 

二、下载第三方浏览器驱动

Selenium自己不带浏览器,需要与第三方浏览器结合使用。

1、通过PhantomJS让程序在后台运行(下载地址:http://phantomjs.org/download.html)它会把网页加载到内存并执行页面上的JavaScript,但不会展示网页的图形界面。可以处理cookie,JavaScript,header等,现在Selenium库已经不支持PhantomJS。

2、选择在浏览器Chrome/Firefox上运行Selenium:

需要下载chromedriver.exe(http://chromedriver.storage.googleapis.com/index.html

版本参照表:http://npm.taobao.org/mirrors/chromedriver/2.41/notes.txt

三、案例

(一)Ajax网页测试

from selenium import webdriver
import time
# 用浏览器运行selenium,需要将下载的chromedriver.exe保存在对应python工程下或指定其他地址
driver = webdriver.Chrome() # chromedriver这里放在工程目录下
# 打开网页
driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html')
# Ajax测试,由于测试网页有ajax加载2秒,所以这里暂停执行3秒
time.sleep(3)
print(driver.find_element_by_id('content').text)
# 关闭网页
driver.close()

(二)检测网页加载成功后再执行

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


# 创建webdriver
driver = webdriver.Chrome()
# 打开网页
driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html')
# 检测网页执行。是否出现某个元素后执行
try:
    # driver等待10秒,直到网页出现元素标签ID名为loadedButton
    elements = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator=(By.ID, 'loadedButton')))
finally:
    # 抓取content元素中的文本
    print(driver.find_element_by_id('content').text)
# 关闭网页
driver.close()

说明:

  1. 一般通过WebDriverWait类和expected_conditions类来实现隐式的等待。
  2. locator定位器对象,用来定位网页元素
  3. 一般定位:ID/CLASS_NAME/CSS_SELECTOR/LINK_TEXT/PARTIAL_LINK_TEXT/NAME/TAG_NAME/XPATH

(三)处理重定向

from selenium import webdriver
import time
from selenium.common.exceptions import StaleElementReferenceException

def waitForLoad(driver):
    elem = driver.find_element_by_tag_name('html')
    count = 0
    while True:
        count += 1
        if count > 20:
            print('Timing out after 10 seconds and returning')
            return
        time.sleep(.5)
        try:
            elem == driver.find_element_by_tag_name('html')
        except StaleElementReferenceException as e:
            print(e)
            return

# 创建webdriver
driver = webdriver.Chrome()
# 打开网页
driver.get('http://pythonscraping.com/pages/javascript/redirectDemo1.html')
# 检测网页执行。是否出现某个元素后执行
try:
    waitForLoad(driver)
finally:
    print(driver.page_source)
# 关闭网页
driver.close()

说明:可以通过异常类StaleElementReferenceException,来实现监控网页变化的效果。当driver无法捕捉到html元素标签,则触发异常,等同于网页已经实现重定向。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值