You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Chrome WebDriver端点发送HTTP请求?Python代码报错解决

Python HTTPConnection连接Chrome WebDriver失败问题修复

问题场景

用Python原生http.client.HTTPConnection向Chrome WebDriver端点发送请求时触发域名解析错误,但Postman中请求完全正常。

原代码

import http.client
import json

connection = http.client.HTTPConnection("http://localhost:9515")
headers = {"Content-type" : "application/json"}
json_data = json.dumps({
    "capabilities " : {
        "browsername" : "chrome",
        "browserVersion" : "12"
    }
})
connection.request("POST", "/session", json_data, headers)
response = connection.getresponse()
connection.close()

报错信息

PS C:\Users\Coder\Desktop\Ayman\automation> python main.py
Traceback (most recent call last):
  File "C:\Users\Coder\Desktop\Ayman\automation\main.py", line 12, in <module>
    connection.request("POST", "/session", json_data, headers)
  File "C:\Python310\lib\http\client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Python310\lib\http\client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Python310\lib\http\client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Python310\lib\http\client.py", line 1037, in _send_output
    self.send(msg)
  File "C:\Python310\lib\http\client.py", line 975, in send
    self.connect()
  File "C:\Python310\lib\http\client.py", line 941, in connect
    self.sock = self._create_connection(
  File "C:\Python310\lib\socket.py", line 824, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "C:\Python310\lib\socket.py", line 955, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

错误原因

  1. HTTPConnection参数格式错误:HTTPConnection的主机参数不能带http://前缀,否则会被当作域名解析,触发socket.gaierror。
  2. WebDriver协议字段不规范:
    • "capabilities "末尾多了空格,WebDriver无法识别该字段
    • "browsername"不符合协议要求的驼峰命名,正确写法是"browserName"
    • "browserVersion"值仅写"12"过于模糊,需对应你的Chrome实际版本号,也可直接省略该字段让Driver自动适配。

修复后的代码

import http.client
import json

# 正确传入主机和端口,去掉http://前缀
connection = http.client.HTTPConnection("localhost", 9515)
headers = {"Content-type": "application/json"}
json_data = json.dumps({
    "capabilities": {
        "browserName": "chrome"
        # 如需指定版本,替换为实际Chrome版本,例如:
        # "browserVersion": "124.0.6367.60"
    }
})
connection.request("POST", "/session", json_data, headers)
response = connection.getresponse()

# 打印响应内容便于调试
print(f"响应状态: {response.status} {response.reason}")
print(f"响应内容: {response.read().decode('utf-8')}")

connection.close()

额外注意事项

  • 确保ChromeDriver已经启动,且监听端口为9515(默认端口,若自定义需同步修改代码)
  • Postman能正常工作是因为它自动处理了协议前缀和部分字段格式问题,而Python原生库需要严格遵循参数规范

内容的提问来源于stack exchange,提问作者Ayman Benyahia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:32:49