以下所有的安装操作和代码测试都是在Ubunt server 18.04 LTS 64bit服务器版本(命令行无界面版本)进行,编程语言使用了Python3.8.0。
我自己学习使用,在linux上直接是root用户了。
一、安装无界面版Chrome
我是从这个网站上找来的教程,自己尝试后有效:https://blog.softhints.com/ubuntu-16-04-server-install-headless-google-chrome/
打开网站后往下拉,拉到Solution Install Google Chrome on Ubuntu 16.04 no GUI这个版块:
1.安装命令
- 首先尝试执行以下命令
sudo apt update
sudo apt install -y libappindicator1 fonts-liberation
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb
- 如果有报错基本上的原因是因为缺少了一些必要的依赖,执行下面命令:
sudo apt -f install
sudo dpkg --configure -a
sudo apt -u dist-upgrade
sudo apt -y install dbus-x11 xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic xfonts-scalable
// 上面这些命令执行完了后,再次安装,一般能成功了
sudo apt update
sudo apt install -y libappindicator1 fonts-liberation
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb
2.查看安装结果
可以通过查看版本号来确定是否安装成功:
google-chrome --version
或者
google-chrome-stable --version
能够打印出版本号就是安装成功了。
3.安装Chrome驱动
Chrome驱动尽量到官方网站去下载:https://sites.google.com/a/chromium.org/chromedriver/downloads
但是没有梯子的话,可以使用备用国内镜像:https://npm.taobao.org/mirrors/chromedriver
可以使用linux命令wget进行下载,也可以下载到本地后通过lrzsz上传到linux中(lrzsz是Windows系统下xshell独有的功能)。
Chrome驱动版本不要下错了,不然即使安装好也可能无法使用!先查看一下Chrome的版本,然后下载对应的驱动版本
// 解压
sudo unzip chromedriver_linux64.zip
// 将驱动放置到系统的二进制目录下
cp chromedriver /usr/bin/
cp chromedriver /usr/local/bin/
检查一下,有了就可以了:
4.测试
- 命令行测试
关于--no-sandbo参数的记录:无论是命令行还是代码,如果是root用户就必须加上--no-sandbo这个参数,否则就会报错!
google-chrome-stable --headless --no-sandbox --disable-gpu --dump-dom https://www.chromestatus.com/
// required argument "--no-sandbox" when running as root user. otherwise you would get no sandbox errors.
- 代码测试
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('-headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', options=options)
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()
最终结果:
5.不写"--no-sandbox"的后果
代码中注释掉options.add_argument('--no-sandbox')
肯定会报错:
二、安装无界面版Firefox
1.直接用apt命令安装
sudo apt update
sudo apt install firefox
2.安装驱动
selenium要使用Firefox就必须要有其对应的驱动:geckodriver
这里有个导航网站,主流浏览器的驱动都能从它这里找到:https://selenium.dev/selenium/docs/api/py/
*同时,网站教程也指出了驱动必须被正确地放置到指定目录下。
尽量到官方网站上去下载驱动,官方网站:https://github.com/mozilla/geckodriver/releases
如果因为不可抗力因素导致官方网站打不开,只能用备用网站了。
备用网站:https://npm.taobao.org/mirrors/geckodriver/(此处以Firefox为例),镜像根网站为:https://npm.taobao.org/
写随笔日期是2019年11月24日16:38:39,我下载了最新版的驱动:
可以使用linux命令wget进行下载,也可以下载到本地后通过lrzsz上传到linux中(lrzsz是Windows系统下xshell独有的功能)。
解压命令:
sudo tar -xvf geckodriver-v0.26.0-linux64.tar.gz
必须将geckodriver放到系统可执行目录下,/usr/bin/ 或者 /usr/local/bin/
为保险起见,两个路径中我都有放置驱动。
cp geckodriver /usr/bin/
cp geckodriver /usr/local/bin/
3.安装依赖
Firefox想要使用selenium必须先安装一个系统级的依赖:
sudo apt install Xvfb
然后安装应用级的python依赖:
pip install PyVirtualDisplay
4.测试代码
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('-headless')
options.add_argument('--no-sandbox')
driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver', options=options)
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()
最终结果: