raspberry pi 使用 selenium firefox

1. 安装虚拟屏幕

我的树莓派系统是 buster lite 版,没有界面,所以先要安装 xvfb

1
sudo apt install xvfb

2. 安装 firefox

1
2
3
4
sudo apt install firefox-esr

firefox-esr -v # 安装完可以检测一下版本
# Mozilla Firefox 68.7.0esr

3. 安装 geckodriver

下载安装 geckodriver-v0.23.0-arm7hf 版的。

  • v0.24.0以后不发布arm7hf平台了,需要自己编译。
  • 好在v0.23.0也可以支持较新版本的 Firefox。
1
2
3
4
5
6
7
8
# 下载
aria2c -c https://github.com/mozilla/geckodriver/releases/download/v0.23.0/geckodriver-v0.23.0-arm7hf.tar.gz
# 解压
tar -xf geckodriver-v0.23.0-arm7hf.tar.gz
# 修改权限
sudo chmod a+x geckodriver
# 移到 path下
sudo mv geckodriver /usr/local/bin/

ref: https://github.com/mozilla/geckodriver/releases

4. 安装 selenium, pyvirtualdisplay

ref: https://www.selenium.dev/downloads/

1
2
pip3 install selenium==4.0.0a5
pip3 install pyvirtualdisplay

5. python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import time

from bs4 import BeautifulSoup
from selenium import webdriver

import pyvirtualdisplay

# 创建虚拟桌面
display = pyvirtualdisplay.Display(backend='xvfb', visible=False, size=(1024, 768))
display.start()
print('Initalized Display:', display.size, display.backend)

# 设置浏览器
options = webdriver.FirefoxOptions()
options.log.level = "trace" # 方便调试
options.headless = True # 无头模式

driver = webdriver.Firefox(options=options)

# 测试一下
url = 'https://www.baidu.com'
driver.get(url)
print(driver.title)

# 退出
driver.close()
driver.quit()
display.stop()
print('Quit...')

6. 添加 selenium 定时任务

可以用 crontab -e 命令添加 selenium 定时任务, 最后一行加入:

1
2
3
# 格式
# minute hour dayofmonth month dayofweek command
0 8 * * * python3 task.py &

如果执行不成功,可能是找不到 selenium webdriver 的路径。

  • 检查 firefox-esr 和 geckodriver 的安装目录。
    1
    2
    3
    4
    which firefox-esr
    # /usr/bin
    which geckodriver
    # /usr/local/bin
  • 然后,在命令前面加上路径配置, export PATH=/usr/local/bin:/usr/bin;
    1
    0 8 * * * export PATH=/usr/local/bin:/usr/bin; python3 task.py &