前言

最近公司要求登录小红书广告后台去下载一个 Excel 文件,并将内容导入到自有管理后台。由于没有对应的 API 接口,就考虑使用 Selenium 完成该需求。

这里记录下一些点,以便之后使用。

配置

配置代理1

脚本放在云服务器定时去执行,发现云服务器的 IP 无法完成登录操作。故在公司内网搭建一个代理服务器,使用路由器自带的 DDNS 功能映射到外网。Selenium 配置代理后就可以正常完成操作了。
Firefox 90版本开始移除对FTP协议的支持2

1
2
3
4
5
6
7
8
from selenium import webdriver

PROXY = "<HOST:PORT>"
webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
    "httpProxy": PROXY,
    "sslProxy": PROXY,
    "proxyType": "MANUAL",
}

启用无头模式3

1
2
3
4
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True

自定义 User-Agent4

1
2
3
options.set_preference(
    "general.useragent.override", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0"
    )

自定义下载目录

通过指定MIME类型5的文件直接保存。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 三个值:0代表桌面,1代表 Downloads 文件夹,2代表最后指定下载的文件夹
options.set_preference("browser.download.folderList", 2)
# 指定 /tmp 为下载存放目录
options.set_preference("browser.download.dir", "/tmp")
# 不询问存放目录,将文件下载到 browser.download.folderList 指定的目录
options.set_preference("browser.download.useDownloadDir", True)
# 下载开始时,不显示下载管理窗口
options.set_preference("browser.download.manager.showWhenStarting", False)
# 指定哪些 MIME 类型的文件直接保存到磁盘,不询问什么方式找开文件
options.set_preference(
    "browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    )