【发布时间】:2017-05-25 12:20:43
【问题描述】:
我最近开始开发 Node js 应用程序,它在控制器中使用 Selenium 从网页中获取项目列表,我想将获取的项目列表作为 JSON 响应返回。
exports.read_all_products = function (req, res) {
var driver = new webdriver.Builder().forBrowser('phantomjs').build();
driver.get('https://www.test.com/products?PC=' +req.params.category);
driver.wait(until.elementLocated(By.className('product-slide-all')), 20000, 'Could not locate the element within the time specified');
driver.findElements(By.className("product-slide-all")).then(function (elements) {
var arr = [];
elements.forEach(function (element) {
element.getAttribute("innerHTML").then(function (html) {
const dom = new JSDOM(html);
var obj = new Object();
obj.product_name = dom.window.document.querySelector(".product-name").textContent;
obj.product_code = dom.window.document.querySelector(".product-code").textContent;
obj.price = dom.window.document.querySelector(".product-price").textContent;
arr.push(obj);
});
});
res.json(arr);
});
}
问题是我总是得到一个空的 JSON 响应,即使项目已添加到数组中。我想知道处理这种情况的正确方法。
谢谢。
【问题讨论】:
-
您可以尝试将您的
res.json(arr);上移一级吗? (在});之前)? -
不,然后我收到一条错误消息,提示“发送后无法设置标题”。
-
哦。在这种情况下,您可以尝试将您的
res.json(arr);改写为JSON.parse(JSON.stringify(arr))吗? -
我仍然遇到同样的错误,我认为这是因为 res.json(JSON.parse(JSON.stringify(arr))) 在 forEach 循环。
-
有什么方法可以用 promises 做吗?
标签: javascript node.js selenium