jquery'yi phantomjs ile kullanmaya çalışıyorum. Bağımsız bir örnek denedim ve iyi çalıştı. İşte ne yaptım: includeJs() yürütmek çünkü fonksiyonunu değerlendirmek, ben) setTimeout (kullandık Yukarıdaki kod snippet'indeJQuery, PhantomJs uygulamasına dahil edilmiyor
loading jquery
message recvd: $("title").text() -> PhantomJS | PhantomJS
: Burada
var page = require('webpage').create();
page.open("http://www.phantomjs.org", function(status) {
page.onConsoleMessage = function(msg) {
console.log("message recvd: " + msg);
};
var result;
page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js", function() {
console.log("loading jquery");
});
setTimeout(function() {
page.evaluate(function() {
console.log("$(\"title\").text() -> " + $("title").text());
});
}, 1000);
}
aldığım çıkışı Eşzamansız ve jquery yüklemek için biraz zamana ihtiyacım var. SetTimeout() öğesini kullanmazsam veya zaman aşımı için küçük bir değer kullanmazsam, çalışmaz. Benim uygulamada aynı kodu çalıştığınızda
Ancak çalışmaz. İşte ne var:
var baseSetup = function(guid, page, config, request, response) {
/* enable the console output inside the callback functions */
page.onConsoleMessage = function (msg) {
console.log(guid + ": console msg: " + msg);
};
/* used for ignoring potential alert messages when evaluating js code */
page.onAlert = function (msg) {
console.log(guid + " (alert): alert msg: " + msg);
};
/* suppress the error messages */
page.onError = function(msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' +
t.file +
': ' +
t.line +
(t.function ? ' (in function "' + t.function + '")' : ''));
});
}
console.error(guid + ": " + msgStack.join('\n'));
};
}
module.exports = function extractionDriver(responseFromUrl, responseToUser, page, request) {
console.log(page.customHeaders['guid'] + ": extractionDriver, status = " + responseFromUrl.status);
if(page.isLocalFile || responseFromUrl.status !== 0)
{
var viewportStr = page.customHeaders['viewportStr'];
console.log(page.customHeaders['guid'] + ": Setting viewport size: " + viewportStr);
var viewportObj = parseViewport(viewportStr);
page.viewport = viewportObj;
page.evaluate(function(w,h) {
document.body.style.width = w + "px";
document.body.style.height = h + "px";
}, viewportObj.width, viewportObj.height);
page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js", function() {
console.log("loading jquery");
});
setTimeout(function() {
page.evaluate(function() {
console.log("$(\"title\").text() -> " + $("title").text());
});
}, 1000);
}
Ve bu benim uygulamayı çalıştırmak gördüğüm değerlerle geçerli:
d8db6045-a0e8-11e4-a619-6949593d958d: ERROR: ReferenceError: Can't find variable: $
TRACE:
-> phantomjs://webpage.evaluate(): 3
-> phantomjs://webpage.evaluate(): 4
-> phantomjs://webpage.evaluate(): 4
günlük çizgi "yükleme jquery" basılmış asla ve jquery yüklü asla.
Ben includeJs ait callback'inde() ancak bu işe yaramadı içine değerlendirmek() fonksiyonunu tamamlamasından denedi ya (hiçbir konsol günlüğü yazdırılır).
Burada yanlış olan ne olabilir? Daha fazla bilgi vermem gerekirse lütfen bana bildirin.
denemek ve sadece eklemek istediğiniz jquery .min fiile ... injectJs kullanırsınız ... ama hala benim için çalışmıyor – carinlynchin
@Carine "server" ile ne demek istediğini bilmiyorum, ancak 'page.injectJs' sadece dosya olduğunda kullanılabilir bir dosya yolu ile ulaşılabilir. Değilse, o zaman bir 'URI aracılığıyla erişilebilir olmalıdır. Bu durumda' page.includeJs 'kullanılmalıdır. –
Evet, .. biliyorum ama page.injectJs ('jquery.min.js') olmasına rağmen, ben hala hata olsun "değişken bulunamıyor: $" – carinlynchin