如何向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
错误原因
- HTTPConnection参数格式错误:
HTTPConnection的主机参数不能带http://前缀,否则会被当作域名解析,触发socket.gaierror。 - 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
相关产品推荐
相关产品推荐

