[Python数据采集]Selenium自动化测试框架

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

前言

很多时候,通过js进行动态渲染的数据并不是直接返回明文,而是通过一些加密算法进行了处理,导致我们无法获取到正确的数据。对此,我们可以通过Selenium自动化测试框架,模拟浏览器进行实现真正的“可见即可爬”。

原理

Selenium是通过模仿浏览器行为,selenium会通过打开一个浏览器,然后执行我们实现设置好的操作事件,从而实现数据获取。

版本

Selenium存在两个不同版本

Selenium RC,Remote Control:传统 Selenium 框架。
Selenium Webdriver:全新自动化接口,突破了 Selenium 1 的一些限制。

我们常用的版本是Selenium Webdriver,后面介绍也将选择该版本。

流程

  1. 创建并且发送给浏览器的驱动;
  2. 驱动中包含一个HTTP Server,用于接收http请求;
  3. HTTP Server根据请求操控浏览器执行步骤;
  4. 浏览器将步骤执行结果返回给HTTP Server;
  5. HTTP Server将结果返回给Selenium脚本。

安装

  1. 安装selenium库

执行下列命令:

pip install selenium
复制代码
  1. 安装chrome驱动

(限windows)下载chromedrive.exe的驱动程序,然后把它复制到python或env的scripts目录下。

使用

from selenium import webdriver
from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup

url = r"https://juejin.cn/"
chrome_options = Options() 
chrome_options.add_argument('--headless') 
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options) 
driver.get(url)
html = driver.page_source 
soup=BeautifulSoup(html,"lxml")
# 后面使用BeautifulSoup进行提取
复制代码

总结

Selenium的优势在于,其可以通过sleep等待加载,从而可以无视js上的逻辑;
但是它也存在一个致命的缺点:容易被检测出来,因此使用上限制较大。