简介: 在Linux上使用Selenium和Python来控制浏览器进行自动化测试或者网页数据抓取是常见的需求。本文将介绍如何在Linux无图形界面环境下使用Selenium与Firefox浏览器以headless模式运行,并提供geckodriver、Xvfb和pyvirtualdisplay等工具的安装步骤。
Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,例如点击、输入文本、验证元素等。selenium官网介绍:
Home: | https://selenium.dev |
GitHub: | https://github.com/SeleniumHQ/Selenium |
PyPI: | https://pypi.org/project/selenium/ |
IRC/Slack: | Selenium chat room https://www.selenium.dev/support/#ChatRoom |
selenium支持多种浏览器/驱动程序(Firefox,Chrome,Internet Explorer)以及远程协议。下表是各浏览器对应的驱动。
本篇以Firefox为例
-- 先安装geckodriver:
geckodriver是Firefox浏览器的驱动程序,用于与Selenium通信。可以通过以下步骤在Linux上安装geckodriver。访问geckodriver的GitHub页面https://github.com/mozilla/geckodriver/releases,下载适合您系统的压缩包。如果使用其他浏览器对应上表下载对应浏览器驱动。
解压下载的文件,并将geckodriver可执行文件所在的目录加入系统的PATH变量。
或者直接move到bin目录:mv geckodriver /usr/bin
-- 安装firefox
yum install gtk3 wget http://releases.mozilla.org/pub/firefox/releases/116.0.3/linux-x86_64/zh-CN/firefox-116.0.3.tar.bz2 tar jxpvf firefox-116.0.3.tar.bz2 sudo ln -s /root/firefox/firefox /usr/bin/firefox
-- 安装selenium
在python环境下安装:pip install selenium
-- 安装Xvfb
Xvfb是一种虚拟的X窗口服务器,可以模拟图形界面。
Ubuntu使用以下命令安装Xvfb: sudo apt-get install Xvfb
如果是centos:
sudo yum search Xvfb 根据搜索结果找到合适的安装包,通常命名为xorg-x11-server-Xvfb sudo yum install xorg-x11-server-Xvfb.x86_64
-- 安装pyvirtualdisplay
pyvirtualdisplay是一个Python库,用于在无图形界面环境下触发Xvfb。
使用以下命令安装pyvirtualdisplay:
pip install EasyProcess pip install xvfbwrapper pip install pyvirtualdisplay
-- 编写Python脚本测试
现在可以编写一个Python脚本来使用Selenium和Firefox浏览器进行自动化测试或网页数据抓取。以下是一个简单的示例:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from pyvirtualdisplay import Display # 创建一个虚拟显示 display = Display(visible=0, size=(1280, 768)) display.start() # 配置Firefox选项 firefox_options = Options() firefox_options.headless = True # 以headless模式运行,具体代码如下: # 创建Firefox browser = webdriver.Firefox(options=firefox_options) # 在这里编写您的代码,例如访问网页、操作元素等 query = 'Selenium的使用' url = f"https://cn.bing.com/search?q={query}" browser.get(url) title = browser.title print("Page title: ", title) browser.save_screenshot('screenshot1.png') # 关闭WebDriver和虚拟显示 browser.quit() display.stop()
在这个示例中,我们首先创建一个虚拟显示,然后配置Firefox选项,将其设置为headless模式。然后,创建一个Firefox WebDriver实例,通过它可以直接与浏览器进行交互。在最后,关闭WebDriver和虚拟显示。
保存Python脚本尝试运行。可以看到浏览器访问bing搜索页面的title,同时生成了搜索页面的屏幕截图。
以headless模式运行selenium,可以不显示浏览器窗口,适合Linux云主机场景,实现自动化测试或者网页数据抓取。这些工具的组合提供了一个可靠且高效的解决方案。