Docker部署Python-Selenium应用:WebDriver配置无结果无报错排查
问题分析与修复方案
1. 浏览器镜像与代码配置不匹配
你启动独立容器用的是selenium/standalone-chrome,但docker-compose里配置的是selenium/standalone-firefox,而代码中使用的是ChromeOptions。Firefox容器无法识别Chrome的配置参数,这会导致连接失败或无响应。
修复:把docker-compose中的镜像改成selenium/standalone-chrome,保持与代码和最初测试的镜像一致:
selenium: image: selenium/standalone-chrome ports: - 4444:4444
2. 硬编码容器IP不可靠
代码中直接写死了http://172.18.0.3:4444/wd/hub,Docker Compose的服务网络中,容器IP可能随重启变化,应该用服务名作为域名访问(Compose会自动解析)。
修复:把Remote连接地址改成服务名:
driver = webdriver.Remote("http://selenium:4444/wd/hub", options=chrome_options)
3. 代码缺少核心逻辑与错误处理
当前函数只初始化了WebDriver,没有执行driver.get(url)等爬取操作,也没有捕获异常的逻辑,所以即使进入函数也不会返回结果,出错也看不到提示。
修复:补充爬取逻辑和错误处理,示例:
def scrap_function(url): chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_prefs = {} chrome_options.experimental_options["prefs"] = chrome_prefs chrome_prefs["profile.default_content_settings"] = {"images": 2} driver = None try: driver = webdriver.Remote("http://selenium:4444/wd/hub", options=chrome_options) driver.get(url) # 这里添加你的爬取逻辑,比如获取页面源码 result = driver.page_source return result except Exception as e: print(f"爬取出错: {str(e)}") return None finally: if driver: driver.quit()
4. Dockerfile命令不完整
你提供的Dockerfile第三条RUN apt-get update命令未完成,不过因为你现在用的是独立Selenium容器,你的Python镜像其实不需要安装Chrome和Chromedriver,这条可以删除或者补全(如果是之前的本地运行方案)。
内容的提问来源于stack exchange,提问作者rolandist_scim
相关产品推荐
相关产品推荐

