Selenium在生产环境是否必须使用无头模式?附Django调用异常问题
点击超链接打开两个页面的修复方案
出现两个链接的原因是你当前逻辑触发了两次页面打开:Selenium启动浏览器打开了一次目标链接,视图最后的redirect又让前端新标签页跳转了一次,所以会出现两个窗口。修复方案如下:
- Django视图必须有返回值,删掉原来的
return redirect(link)后,替换为返回204无内容响应即可避免报错,也不会触发额外跳转,修改后的视图代码:
from django.http import HttpResponse def bypass_link(request, pk=None): instance = fields.objects.get(pk=pk) link = instance.quote options = webdriver.ChromeOptions() driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) driver.get(link) driver.find_element_by_id("butAgree").click() # 用完主动关闭浏览器避免内存泄漏 driver.quit() return HttpResponse(status=204)
- 可选优化:把模板a标签里的
target="_blank"属性删除,避免点击后弹出空白的新标签页。
生产环境Selenium是否必须使用无头模式
不是必须的。你生产环境非无头模式报错的原因是绝大多数线上服务器都是无图形界面的Linux系统,Chrome浏览器常规启动依赖图形环境组件,没有对应组件就会启动失败,无头模式不需要依赖图形环境所以可以正常运行。
如果不想使用无头模式,可以按照以下方案配置生产环境:
- 如果是Linux服务器,安装Xvfb虚拟显示服务,模拟出一个虚拟图形环境供给Chrome调用,不需要实体显示器也能正常启动非无头模式的Chrome。
- 如果生产环境本身是带桌面系统的Windows/macOS服务器,直接运行非无头模式的Selenium不会报错,不需要额外配置。
注意:你当前的代码每次请求都会新建一个Chrome进程,没有主动释放资源,长时间运行会占满服务器内存,一定要加上
driver.quit()在操作完成后主动关闭浏览器进程。
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

