मैं एक nightmare.js स्क्रिप्ट जहां जहां मैं एक पृष्ठ पर कई घटक के एक स्क्रीनशॉट लेने के लिए कोशिश कर रहा हूँ चल रहा हूँ।Nightmare.js स्क्रीनशॉट बफर लंबाई 0
पहले तत्व ठीक से कब्जा कर लिया गया है, लेकिन गुना के नीचे मौजूद हर दूसरे तत्व को शून्य लंबाई के साथ पकड़ा जाता है। मैं इस मुद्दे को डीबग करने के लिए संघर्ष कर रहा हूं। किसी भी मदद की सराहना की जाएगी।
असल में यह स्क्रिप्ट एक पृष्ठ के माध्यम से चलता है और सभी चयनकर्ता से मेल खाने वाले पृष्ठ पर मौजूद तत्वों का चयन करता है। फिर, async
का उपयोग करके यह प्रतिक्रिया एकत्र करता है और वस्तुओं का एक बफर देता है। मुद्दा यह है कि गुना के नीचे वाले तत्वों को स्क्रीनशॉट नहीं किया जाता है (बफर लंबाई शून्य पर समाप्त होती है)। मैंने wait()
पर कोशिश की और तत्व पर स्क्रॉल किया, लेकिन मुझे अभी तक कोई सफलता नहीं मिली है।
import * as Nightmare from 'nightmare'
import * as vo from 'vo'
import * as async from 'async'
import * as fs from 'fs'
const urls:String[] = [
'https://yahoo.com/'
]
Nightmare.action('snap', function(selector:String, done:Function) {
const self = this;
this.evaluate_now(function (selector) {
return Array.from(document.querySelectorAll(selector))
.map((ele:Element) => {
if (ele) {
const rect = ele.getBoundingClientRect()
const r:Function = Math.round
return {
x: r(rect.left),
y: r(rect.top),
width: r(rect.width),
height: r(rect.height)
}
}
})
}, function(err, clips) {
if (err) return done(err)
if (!clips) return done(new Error(`Selector not found`))
let snaps = []
const snap = (clip, cb) => {
self
.scrollTo(clip.y - clip.height, clip.x)
.screenshot(clip, cb)
.run()
}
async.mapSeries(clips.reverse(), snap, (err, res) => {
done(err, res)
})
}, selector)
})
const scrape = (url) => {
const nightmare = Nightmare({
show: true
});
nightmare
.goto(url)
.snap('.navbar')
.end()
.then((buffers:Buffer[]) => {
buffers.forEach((data, index) => {
fs.writeFileSync(`images/navbar-${index}.png`, data)
})
})
}
urls.forEach(scrape)
मैं इस मुद्दे को पुन: उत्पन्न करने की कोशिश कर रहा हूं लेकिन मुझे पता चला कि yahoo.com पृष्ठ पर ऐसा कोई तत्व ".navbar" नहीं है। क्या आप इसे स्पष्ट कर सकते हैं? –
Evgeny, निश्चित रूप से। इसे बूटस्ट्रैप वाले पेज पर आज़माएं, यानी: https://getbootstrap.com/ – auser
क्या आप इसे दोहराने में सक्षम थे, @EvgenySorokin? – auser