CentOS7上使用Chrome的无头浏览器

0. 前言

说到Python爬虫,就一定会涉及到“反爬”策略,就会遇到“爬取动态页面元素”的问题,如果目标网站没有其他的反爬措施,那么“动态元素”就是我们这里要解决的唯一难题。而解决的方式就是简单粗暴地想办法模拟人在浏览器上操作,进而触发相应动态元素的加载,也就指向了强大的Selenium

众所周知,Chrome是Google家的浏览器,在2007年开始推出了自己的无头模式。而我们曾经熟悉的PhantomJS却在之后不再被Selenium所支持(目前只支持ChromeFirefox的无头模式,据说这是一种大厂效应23333)。在MacOS下,坑会少一些,但放在我的服务器上坑就多了起来。

注:以下配置过程请在非root用户账号下完成。

1. 安装chrome

1.1 添加repo

$ sudo vi /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

1.2 yum安装

$ sudo yum update
$ sudo yum install google-chrome-stable

2. 安装chromedriver

2.1 查看chrome的版本

$ google-chrome --version

2.2 下载chromedriver

请注意chromechromedriver的区别,前者是浏览器,后者是其驱动,而二者缺一不可。推荐在官网下载最新的chromedriver,如果没有“梯子”,这里也有各个版本的chromedriver,而你要选择的版本要与你的chrome版本对应(如ChromeDriver 2.46 支持 Chrome v71-73)。

2.3 添加至环境变量$PATH

$ sudo vim ~/.bash_profile

打开后在适当的位置添加:
(假设你把chromedriver放到了/home/xxx/drivers/bin/目录下)

export PATH=/home/xxx/drivers/bin:$PATH

CentOS中,更推荐在最后export PATH,而前面加上一行赋值

PATH=$PATH:/home/xxx/drivers/bin

这两种方式作用上是完全等价的。

3. 安装selenium

selenium可以在你项目的虚拟环境中简单地用pip安装

$ pip3 install selenium

4. 脚本测试

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

DRIVER_PATH = '/home/xxx/drivers/bin/chromedriver'


if __name__ == "__main__":
    # 设置浏览器
    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')  # 无头参数
    options.add_argument('--disable-gpu')
    # 启动浏览器
    driver = Chrome(executable_path=DRIVER_PATH, options=options)
    # 访问目标URL
    driver.get('https://www.baidu.com/')
    print(driver.page_source)
    driver.close()
    driver.quit()

注意,这里的--no-sandbox--headless是必须的,而且必须按照--no-sandbox在最前面的顺序,否则会报一些非常摸不着头脑的错误(这就是最坑的地方)。

希望看到这篇文章的你能解决想要解决的问题。



作者:deBroglie
链接:https://www.jianshu.com/p/e2a6bb6550cc
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(前言测试技术研究,centos,chrom,Selenium)