缘由

        目前由于工作需要,我们需要爬虫(本人严重申明:商业爬虫属于违规行为,请各位技术同事不要有意无意的做违规的事情)获取网页一些东西,但是大家都知道目前有很多网站都是用前后端分离的,使用curl请求是没办法获取到页面信息的,所以我们就基于目前我们相对擅长的技术点选择了 “Selenium”。刚好自己又会一点Python。所以这样我们的技术方案就可以执行下去了。

Selenium介绍

       Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。从我个人浅显的理解:提供了扩展来模拟用户与浏览器的交互。有如下特点

  • 支持主流的大部分浏览器:ie、ff、safari、opera、chrome

  • 支持多平台:windows、linux、MAC 

  • 支持主流语言的操作库:Python、Java、C#、Ruby、JavaScript、Kotlin

Selenium安装

操作库安装 

         由于我们使用的python语言,所以我们就要安装python的库。

pip install selenium


WebDriver

        Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动程序。 驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。

        我个人使用的是Chrome浏览器,所以我需要下载Chrome的WebDriver,大家可以去官网下载对应浏览器版本的驱动:传送门

#下载对应版本的浏览器(就是下面按照的chrome浏览器版本)
wget https://chromedriver.storage.googleapis.com/91.0.4472.19/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
chmod a+x chromedriver
#放到环境变量中
cp chromedriver /usr/bin/

Chrome浏览器

        我个人目前管理的服务器都是CentOS操作系统,所以我们就得在操作系统上面安装浏览器。

#第一步添加源
$ vim  /etc/yum.repos.d/google.repo
#添加如下内容
[google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

#第二步安装
$ sudo yum update
$ sudo yum install google-chrome-stable

#第三步查看chrome的版本
$ google-chrome --version

脚本测试

from selenium import webdriver
if __name__ == "__main__":
    # 设置浏览器
    options = webdriver.ChromeOptions()
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
    options.add_argument('--disable-gpu')#谷歌文档提到需要加上这个属性来规避bug
    options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
    # 启动浏览器
    driver =  webdriver.Chrome(executable_path="/data/www/driver/chromedriver_90_linux64", options=options)
    # 访问目标URL
    driver.get('http://www.jixuejima.cn')
    print(driver.page_source)
    driver.close()
    driver.quit()

演示视频