如何在Chrome开发者工具中捕获特定的AJAX(XHR)事件?
我想从美国邮政局的“家家户户”直邮服务中搜集一些信息。服务很简单。在上,用户输入邮政编码,例如10030,单击搜索按钮,然后显示地图该调用很容易在浏览器开发人员控制台中捕获。这只是一个GET请求,如下所示:如何在Chrome开发者工具中捕获特定的AJAX(XHR)事件?,ajax,google-chrome,post,Ajax,Google Chrome,Post,我想从美国邮政局的“家家户户”直邮服务中搜集一些信息。服务很简单。在上,用户输入邮政编码,例如10030,单击搜索按钮,然后显示地图该调用很容易在浏览器开发人员控制台中捕获。这只是一个GET请求,如下所示: https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/routes/execute?f=json&env:outSR=102100&ZIP=10030&Rte_Box=R&UserN
https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/routes/execute?f=json&env:outSR=102100&ZIP=10030&Rte_Box=R&UserName=EDDM
但是,问题是试图捕获页面右侧显示的表或文本信息。“显示表格”选项:
这样显示输出,此时您可以单击“全选(10条路线)”,它将在页面右侧显示类似的内容:
如何捕获这组Javascript“按钮点击”请求?目前,我只是尝试捕获这些请求,以便能够以编程方式复制它们(在Python中,但这在这里并不严格相关)
看起来您需要发出两个GET请求才能获取所有数据。第二个请求是获取邮政信箱总数所必需的。也许它们可以合并成一个,我没有深入研究太多
https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/routes/execute?f=json&env%3AoutSR=102100&ZIP=10030&Rte_Box=R&UserName=EDDM
https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/boxes/execute?f=json&env%3AoutSR=102100&ZIP=10030&Rte_Box=B&UserName=EDDM&extent=%7B%22xmin%22%3A-15628202.596646052%2C%22ymin%22%3A749662.6717286934%2C%22xmax%22%3A-6235620.560966092%2C%22ymax%22%3A7070087.666571667%2C%22ymin%22%3A%7B%22wkid%22%3A102100%7D%7D代码>
let promises = [
fetch('https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/routes/execute?f=json&env%3AoutSR=102100&ZIP=10030&Rte_Box=R&UserName=EDDM'),
fetch('https://gis.usps.com/arcgis/rest/services/EDDM/selectZIP/GPServer/boxes/execute?f=json&env%3AoutSR=102100&ZIP=10030&Rte_Box=B&UserName=EDDM&extent=%7B%22xmin%22%3A-15628202.596646052%2C%22ymin%22%3A749662.6717286934%2C%22xmax%22%3A-6235620.560966092%2C%22ymax%22%3A7070087.666571667%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D')
];
Promise.all(promises)
.then(async res => {
if (res[0].ok && res[1].ok) {
const first = await res[0].json();
const second = await res[1].json();
const results = [...first.results[0].value.features, ...second.results[0].value.features];
console.log("Total Residential Addresses:", results.reduce((acc, row) => acc + row.attributes.RES_CNT, 0));
console.log("Total Business Addresses:", results.reduce((acc, row) => acc + row.attributes.BUS_CNT, 0));
console.log("Total Delivery Addresses:", results.reduce((acc, row) => acc + row.attributes.TOT_CNT, 0));
}
});
更新以显示如何分别检索住宅和商业地址。谢谢。你是怎么知道第二个GET请求的?我必须修改它,因为我不仅要查找邮政信箱的总数,还要查找住宅和/或商业地址的总数以及表中的其他数据。假设在Python中执行此操作时,我必须在同一个会话中发出两个GET请求?第二个请求以某种方式依赖于第一个请求吗?如果您在网络面板的XHR选项卡中查看请求,您将看到两个请求一个接一个。这两个请求互不依赖,一个指向…/GPServer/routes,另一个指向…/GPServer/box。该表中的所有数据都位于结果[0].value.features.attributes属性中这两个调用的响应中。看起来公共汽车是商业用的,而汽车是住宅用的。