docker - Chrome 在 docker 容器中返回状态码 400
问题描述
我在 docker 容器中运行量角器硒测试。我必须测试一个不安全的网站。对于进行 API 调用以从支持的 chrome 取回一些数据的函数之一,返回状态代码 400。我在量角器配置文件中添加了以下内容:
铬 args("--headless", "--no-sandbox", "--disable-dev-shm-usage")
directConnection: true,
disableChecks: true
能力:
acceptInsecureCerts: true
acceptSslCerts: true
我还在 .env 文件中添加了以下内容:
NODE_TLS_REJECT_UNAUTHORIZED=0
以下是我得到的网络日志:
{
method: 'Network.responseReceived',
params: {
frameId: '721A00F872D1255AA1DAE58D2DF5D75E',
loaderId: '70EAE0F82B0AB6BDE6489BC26D77DA34',
requestId: '117.239',
response: {
connectionId: 309,
connectionReused: true,
encodedDataLength: 123,
fromDiskCache: false,
fromPrefetchCache: false,
fromServiceWorker: false,
headers: [Object],
mimeType: 'application/problem+json',
protocol: 'h2',
remoteIPAddress: 'remote ip',
remotePort: 443,
securityDetails: [Object],
securityState: 'insecure',
status: 400,
statusText: '',
timing: [Object],
url: 'https://api call link'
},
timestamp: 15184.562748,
type: 'XHR'
}
}
{
method: 'Network.dataReceived',
params: {
dataLength: 185,
encodedDataLength: 0,
requestId: '117.239',
timestamp: 15184.562954
}
}
{
method: 'Network.dataReceived',
params: {
dataLength: 0,
encodedDataLength: 203,
requestId: '117.239',
timestamp: 15184.563471
}
}
{
method: 'Network.loadingFinished',
params: {
encodedDataLength: 326,
requestId: '117.239',
shouldReportCorbBlocking: false,
timestamp: 15184.552973
}
}
需要注意的是,当在 docker 容器外部本地运行时,此函数按预期工作,API 调用返回状态码:200
PS 在 Zelenium 中运行它与在 docker 中本地运行的结果相同。
编辑:控制台日志包含以下错误:
Failed to load resource: the server responded with a status of 400 ()
解决方案
状态:400
status: 400表示400 Bad Request和HTTP 400 Bad Request
响应状态代码表示服务器不能或不会处理请求,因为某些东西被认为是客户端错误,例如格式错误的请求语法、无效的请求消息帧或欺骗性请求路由。
您的代码试验、相关 HTML 和完整的错误堆栈跟踪方面的一些信息将帮助我们以更好的方式分析问题。但是,根据Failed to load resource: server 响应状态为 400 ()中的讨论,网页的HTML DOM似乎包含启用AJAX和JavaScript的元素。
因此,当您调用get()
方法时,在与特定网页上的任何元素交互之前,您需要诱导WebDriverWait以使所需元素可点击,这将确保:
- 相关的JavaScript和AJAX 调用已完成渲染DOM 树。
- 所需元素已启用且可见,以识别通过Selenium
click
传播的事件。
参考
您可以在以下位置找到一些相关的讨论:
- 加载资源失败:服务器响应状态为 400 (Bad Request) Spring JS call to Controller not working
- spring post加载资源失败:服务器响应状态为400(错误请求)
- Google adsense 响应服务器响应状态为 400 ()
tl; 博士
加载资源失败:服务器通过 Selenium 使用 ChromeDriver Chrome 响应状态为 429(请求过多)和 404(未找到)
推荐阅读
- angular - 角度 httpClient 中的捕获错误仍然记录 401
- c++ - 为什么我在尝试将数组中的值写入 CSV 文件时会出现段错误
- css - CSS - 显示:表格单元格无法正常工作
- flask - flask socketIO 多处理值
- python - 无法使用 python 在 for 循环中解析 .msg 文件
- css - 使用 d-inline-block 引导内联
- python - 键入“(”时python IDLE关闭
- python - 从 blablacar 网站提取 5000 个骑行细节
- javascript - 用于翻译容器的 Javascript/jQuery addClass/removeClass 不起作用
- gcc - 在树莓派 3 上安装 gcc-aarch64-linux-gnu 交叉编译器