Selenium报错socket.error: [Errno 111] Connection refused如何解决?
解决Selenium测试中的
socket.error: [Errno 111] Connection refused问题 嘿,咱们一步步拆解这个问题,这个错误通常是几个常见原因导致的:
1. 最核心的排查:你的Web应用服务没启动呀!
这个连接拒绝错误的头号原因,就是你Selenium要访问的http://127.0.0.1:8000根本没在运行。先做这两步:
- 手动打开浏览器输入这个URL,看看能不能正常加载页面
- 如果打不开,赶紧启动你的Web服务(比如Django项目就跑
python manage.py runserver),确保服务在8000端口正常监听
2. 先修复代码里的基础语法错误
你的导入语句写在一起了,这会直接导致代码报错,得拆成两行:
from selenium import webdriver import httplib
3. 优化Chromedriver的配置
你手动指定了chromedriver路径,很可能存在路径错误或者版本不匹配的问题:
- 先确认
v1/chromedriver-Linux64这个路径是对的,文件确实存在,而且给它加可执行权限(跑chmod +x v1/chromedriver-Linux64就行) - 更省心的方式是用
webdriver-manager自动管理driver版本,完全不用手动找路径:
先装依赖:pip install webdriver-manager
然后修改driver初始化代码:from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
4. 换掉过时的元素定位方法
你用的driver.find_element_by_css_selector("#menu")是Selenium 3的旧语法,现在Selenium 4+已经弃用了,换成新写法更稳妥:
from selenium.webdriver.common.by import By driver.find_element(By.CSS_SELECTOR, "#menu")
调整后的完整示例代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import httplib # 自动匹配并安装对应版本的chromedriver driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) url = "http://127.0.0.1:8000/loty/accounts/login/" try: driver.get(url) # 定位目标元素 menu_element = driver.find_element(By.CSS_SELECTOR, "#menu") print("成功找到菜单元素啦") except httplib.BadStatusLine as bsl: print(f"遇到状态行错误: {bsl}") except Exception as e: print(f"发生其他错误: {e}") finally: # 记得用完关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Jecke
相关产品推荐
相关产品推荐

