के बाद केवल फ़ैंटॉमजेएस स्क्रिप्ट को समाप्त करने के लिए कैसे करें I मेरा एक प्रोजेक्ट (वर्तमान में संस्करण 1.6 का उपयोग करके) में फैंटॉमजेएस हेडलेस ब्राउज़र को एकीकृत करने पर काम कर रहा हूं। अधिकांश भाग के लिए, यह पूरा करने में मुझे एक महान काम कर रहा है कि मुझे पूरा करने की आवश्यकता है। हालांकि, WebPage.open() कॉल करने के तरीके की असीमित प्रकृति, और किसी बिंदु पर phantom.exit() को कॉल करने की आवश्यकता, क्लाइंट साइड रीडायरेक्ट को संभालने में मुश्किल होती है जब आप यह अनुमान नहीं लगा सकते कि वे कहां जा रहे हैं जाना।क्लाइंट-साइड रीडायरेक्ट्स
मैं जो भी कर रहा हूं वह किसी भी मेटा रीफ्रेश (जो एक अलग पृष्ठ पर जाता है) के बाद केवल phantom.exit() को कॉल करने का एक तरीका है और ऑनलोड ईवेंट जैसी चीजों से जुड़ा जावास्क्रिप्ट रीडायरेक्ट निष्पादित किया गया है। मैं देख सकता हूं कि यह एक मुद्दा क्यों है, क्योंकि सिद्धांत में क्लाइंट साइड रीडायरेक्ट पेज लोड के बाद किसी भी सेकेंड में हो सकता है, और मैं केवल तब बाहर निकलने की क्षमता नहीं मांग सकता जब रीडायरेक्ट नहीं होता जगह लें। अभी, सबसे अच्छा समाधान मैं सोच सकता हूं कि ए) पृष्ठ पर मेटा रीफ्रेश तत्वों की उपस्थिति का मैन्युअल रूप से पता लगाता है और उन लोगों से निपटता है, और बी) कुछ निश्चित समय की अनुमति देने के लिए setInterval() का उपयोग करें (कहें, 1- 1.5 सेकंड) phantom.exit() को कॉल करने से पहले elapse करने के लिए। यह मूल रूप से इस तरह दिखता है:
var page = require('webpage').create();
var visitComplete = false;
var url = "http://some.url";
var pageOpenedTime;
setInterval(function() {
if (visitcomplete && typeof pageOpenedTime != 'undefined' &&
new Date() - pageOpenedTime >= 1500)
{
phantom.exit();
}
), 1000);
page.open(url, function() {
pageOpenedTime = new Date();
if (!hasMetaRefresh(page)) {
visitComplete = true;
}
});
function hasMetaRefresh(page) {
// Query the DOM here to detect meta refresh elements
}
कोई बेहतर विचार?
संपादित करें: मुझे यह उल्लेख करना चाहिए कि मेरा पहला विचार यह था कि प्रारंभिक पृष्ठ लोड से जुड़े जावास्क्रिप्ट को निष्पादित करते समय एक फैंटॉमजेएस घटना हो सकती है, लेकिन ऑनलोड लोड कॉलबैक किसी भी इन-इन के निष्पादन से पहले प्रतीत होता है। ऑनलोड घटनाओं सहित पेज जावास्क्रिप्ट। मैंने कुछ परीक्षण किए हैं कि मुझे कितने अंतराल की प्रतीक्षा करनी पड़ सकती है, और एक छोटे से परीक्षण पृष्ठ में निष्पादित करने के लिए जावास्क्रिप्ट रीडायरेक्ट (बॉडी ऑनलोड इवेंट के माध्यम से) के लिए 1000 एमएस काफी लंबा था, 100 एमएस काफी लंबा नहीं था।
मैंने अपनी परियोजना में एक ही दृष्टिकोण का उपयोग किया, यानी।कॉल के बीच थोड़ा विराम जोड़ा गया। मुझे डर है कि यह एकमात्र विकल्प है (अभी के लिए)। –