Selenium+Headless Firefox
背景
今天本地调试基于Selenium+PhantomJS的动态爬虫程序顺利结束后,着手部署到服务器上,刚买的热乎的京东云,噼里啪啦一顿安装环境,最后跑的时候报了这么个错误:
1 | UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead |
运用我考了五遍才飘过的六级英语定睛一看,这个意思是说,新版本的Selenium不再支持PhantomJS了,请使用Chrome或Firefox的无头版本来替代。脑瓜里瞬间响起了这首歌的旋律,简直不能接受,凭什么就把我们PhantomJS抛弃了(╯‵□′)╯︵┻━┻。
因为这半年都没有写爬虫的需求,并且最近一直在本地用的老版本Selenium开发,所以一直还PhantomJS的很嗨,殊不知脚步已经落后了。查了一下,大概是去年七八月份Chrome和Firefox相继推出了无头浏览器模式。可能就因为这样,PhantomJS独领风骚的局面瞬间丧失,然后逐渐消失在历史的尘埃中吧……小厂出的创新产品,大厂做出类似产品之后,小厂GG,大概也是这么一回事吧……
Selenium+Headless Firefox
虽然很不情愿,但是人不能总是追忆过去的美好,该往前走的时候就要往前走对吧~
其实Selenium+Headless Firefox没什么好说的,跟Selenium+Friefox的区别就是实例化的时候传个参数而已。
需要注意的点就是:
本地要有Firefox,不然报找不到载体 本地要有geckodriver,最好再配置一下环境变量 没了
各个语言的示例代码都可以在这个链接里找到,这里就搬运一下python的示例代码吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from selenium.webdriver import Firefox from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.firefox.options import Options from selenium.webdriver.support import expected_conditions as expected from selenium.webdriver.support.wait import WebDriverWait if __name__ == "__main__" : options = Options() options.add_argument( '-headless' ) # 无头参数 driver = Firefox(executable_path= 'geckodriver' , firefox_options=options) # 配了环境变量第一个参数就可以省了,不然传绝对路径 wait = WebDriverWait(driver, timeout= 10 ) driver.get( 'https://www.google.com' ) wait.until(expected.visibility_of_element_located((By.NAME, 'q' ))).send_keys( 'headless firefox' + Keys.ENTER) wait.until(expected.visibility_of_element_located((By.<a class = "keylink" href= "https://www.2cto.com/kf/qianduan/css/" target= "_blank" rel= "noopener nofollow" >CSS</a>_SELECTOR, '#ires a' ))).click() print(driver.page_source) driver.quit() |
win10和ubuntu下我都测试了没问题,从前实例化一个PhantomJS大约3秒,Headless Firefox的话,7秒左右……其实无伤大雅。
这里友情提示一下新手小伙伴,别每下载一个网页实例化一个webdriver(Firefox or Chrome)然后就close()掉,实例化webdriver的时间也是时间~推荐将下载器做成单例类或将webdirver做类变量。
Selenium+Headless Chrome
这个跟上边大同小异,我没试,传送门:
PhantomJS在Selenium中被标记为过时的应对措施 Getting Started with Headless Chrome
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下