PhantomJs – 从页面中获取价值。评估+ ajax(同步版)

问题:page.evaluate ajax请求中提取数据

描述:我通常通过简单地返回它们来获取页面外的变量。 但是,我需要在页面的上下文中创建一个ajax请求,然后我需要从页面的上下文中处理它的结果。

我试图解决的代码是:

 var theOutput = page.evaluate(function () { return $.ajax({ async: false, url: 'http://localhost:8080/captcha.php', data: { filename: 'C:\\wamp\\www\\images\\0.png' }, type: 'post', success: function (output) { parsed_output = $.parseHTML(output); return parsed_output[4].data.trim(); }, }); }); console.log(theOutput); 

变量parsed_output[4].data.trim()是一个字符串。 但是当我记录output我得到一个[object Object] ,其属性为abort, always, complete, done, error, fail, getAllResponseHeaders, getResponseHeader, overrideMimeType, pipe null, progress, promise, readyState, setRequestHeader, state, statusCode, success,then

问题:如何从page.evaluate提取page.evaluate

由于这是一个阻塞的AJAX请求,您可以创建一个临时变量:

 var theOutput = page.evaluate(function () { var result; $.ajax({ async: false, ... success: function (output) { parsed_output = $.parseHTML(output); result = parsed_output[4].data.trim(); }, }); return result; }); console.log(theOutput); 

您还可以直接从jqXHR对象访问responseText

 var theOutput = page.evaluate(function () { var jqXHR = $.ajax({ async: false, url: 'http://localhost:8080/captcha.php', data: { filename: 'C:\\wamp\\www\\images\\0.png' }, type: 'post' }); parsed_output = $.parseHTML(jqXHR.responseText); return parsed_output[4].data.trim(); }); console.log(theOutput); 

如果您担心不推荐使用async: false ,则只需使用基础XMLHttpRequest即可使用阻塞执行:

 var theOutput = page.evaluate(function () { var request = new XMLHttpRequest(); request.open('POST', 'http://localhost:8080/captcha.php', false); request.send($.param({ filename: 'C:\\wamp\\www\\images\\0.png' })); var parsed_output = $.parseHTML(request.responseText); return parsed_output[4].data.trim(); }); console.log(theOutput);