scrapy 使用 在Linux上离线安装firefox及驱动并指定驱动和浏览器路径
Linux刚安装好的时候,默认是火狐浏览器并且版本比较低,我的系统是CentOS,火狐版本号很低,用yum安装的话版本也不是最新,只要从官方网站下载最新版安装就可以了,方法如下:首先去火狐主页,中文是http://www.firefox.com.cn/,点击"免费下载"
先来查看fire是否安装以及安装的版本号,如果已经安装,执行命令:
rpm -qa |grep firefox
卸载firerfox原来的版本。,则执行命令
rpm -e firefox
将我们下载好的安装包Firefox-latest.tar.bz2,然后我们进行解压释放安装包:
#解压bz2文件需要bzip2包,先安装bzip2包,再进行解压
yum -y install bzip2
tar -xjvf Firefox-latest-x86_64.tar.bz2 -C /usr/local/
进入新解压的firefox目录
cd /usr/local/firefox
创建软连接
ln -s /usr/local/firefox/firefox /usr/local/bin
安装firefox驱动 geckodriver-v0.26.0-linux64.tar.gz , 下载地址:https://github.com/mozilla/geckodriver/releases/ ,下载的时候需要与firefox版本匹配
mkdir -p firefoxbrowser/driver cd firefoxbrowser #上传两个文件到这个目录 Firefox-latest-x86_64.tar.bz2 geckodriver-v0.26.0-linux64.tar.gz # 解压 tar -xjvf Firefox-latest-x86_64.tar.bz2 -C ./ tar -xzf geckodriver-v0.26.0-linux64.tar.gz -C ./driver/
在用selenium做爬虫的时候,需要用到无头浏览器,phantomJS已经成为历史,可以使用chrome或firefox的无头模式。但是在实际应用中由于本人在linux中只有普通用户权限,所以需要自己安装firefox和驱动,并在爬虫程序中指定自定义的目录。
以上自定义的目录selenium不会自动识别,除非firefox是用yum安装,而驱动解压后的geckodriver 文件放在/usr/local/bin下。 所以我们需要在代码中指定浏览器和驱动的具体地址:
# 在初始化页面对象时,创建driver# 使用火狐浏览器 option = webdriver.FirefoxOptions() # 使用谷歌浏览器 # option = webdriver.ChromeOptions() # root用户也可以启动 option.add_argument("--no-sandbox") option.add_argument("--headless") # 指定firefox浏览器地址,win环境 option.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe' # 指定firefox浏览器地址,linux环境 # option.binary_location = r'/home/lzq/driver/firefox/main/firefox/firefox' # option.headless = True # 使用火狐浏览器 win环境,可以不指定驱动地址 # self.driver = webdriver.Firefox(options=option) self.driver = webdriver.Firefox(options=option, executable_path="C:\Log\geckodriver.exe") # 指定驱动地址,linux环境# self.driver = webdriver.Firefox(options=option, executable_path="/home/lzq/driver/firefox/dr/geckodriver") # 指定驱动地址,win地址
以上代码在linux运行的时候遇到了报错,错误原因是在linux中的目录地址必须是用 ‘/’ ,而我用了 ‘\’ ,导致 报错:需要对 \home\lzq\driver\firefox\dr\geckodriver 设定一个path。当报需要一个PATH时,可以把driver放本文件的同级目录下也行。
通过以上在代码中的指定,具体是参数指定。则安装的浏览器和驱动可以放在任意目录,而不考虑root权限安装的问题。