2017-11-13 1 views
1

Ich versuche, dynamische Seitenautomatisierungsbefehle von einer externen Datei an den Puppenspieler zu übergeben. Ich bin neu für Puppenspieler und Knoten, also entschuldige ich mich im Voraus.Wie können dynamische Seitenautomatisierungsbefehle von einer externen Datei an den Puppenspieler übergeben werden?

// app.js 
// ======== 

app.get('/test', (req, res) => 
(async() => { 

const browser = await puppeteer.launch(); 
const page = await browser.newPage(); 
await page.goto('http://testurl.com'); 

var events = require('./events.json'); 

for(var i=0;i<events.length;i++){ 
    var tmp = events[i]; 
    await page.evaluate((tmp) => { return Promise.resolve(tmp.event); }, tmp); 
} 

await browser.close();  
})()); 

Meine Termine JSON-Datei wie folgt aussieht:

// events.json 
// ======== 

    [ 
    { 
     "event":"page.waitFor(4000)" 
    }, 
    { 
     "event":"page.click('#aLogin')" 
    }, 
    { 
     "event":"page.waitFor(1000)" 
    } 
] 

ich mehrere Varianten des oben versucht haben, sowie den Import eines Moduls, das die Seite Objekt zu einer der Modulfunktion geht, aber nichts hat gearbeitet. Kann mir jemand sagen, ob das möglich ist und, wenn ja, wie kann ich das besser erreichen?

+0

dies hilfreich https://nodejs.org/docs/latest/api/modules.html – Everettss

Antwort

1

Die Lösung ist eigentlich sehr einfach und unkompliziert. Sie müssen nur verstehen, wie das funktioniert.

Zunächst einmal können Sie nicht Seite Elemente wie diese zu bewerten. Stattdessen können Sie die folgende tun,

Auf einer separaten Datei,

module.exports = async function getCommands(page) { 
    return Promise.all([ 
     await page.waitFor(4000), 
     await page.click("#aLogin"), 
     await page.waitFor(1000) 
    ]); 
}; 

Jetzt auf Ihrem Haupt-Datei,

await require('./events.js').getCommands(page); 

Dort ist es geschafft! Es führt alle Befehle für Sie einzeln nacheinander aus.

Dies ist der komplette Code mit einigen Anpassungen,

const puppeteer = require("puppeteer"); 


async function getCommands(page) { 
    return Promise.all([ 
     await page.title(), 
     await page.waitFor(1000) 
    ]); 
}; 

(async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto("https://example.com"); 

    let data = await getCommands(page); 
    console.log(data); 

    await page.close(); 
    await browser.close(); 
})(); 
+0

Vielen Dank für die Antwort sein kann, aber es doesn‘ Es scheint, als respektieren Sie die Async/erwarten Sie die Ereignisse. Ich vermute, weil das "Ereignis" nur eine JSON-Zeichenfolge ist und nicht als Methode ausgewertet wird. Irgendeine Art zu behandeln? –

+0

Dort habe ich den Code geändert. –

Verwandte Themen