Effectuer des actions Puppeteer dans le contrôleur Laravel à l'aide du code JavaScript
P粉098417223
P粉098417223 2023-08-28 09:40:29
0
1
533
<p>J'utilise Puppeteer pour lancer le navigateur à partir d'un contrôleur Laravel, mais je ne sais pas comment exécuter du code JavaScript à partir du contrôleur</p> <p>Ma fonction est la suivante :</p> <pre class="brush:php;toolbar:false;">$script = <<<SCRIPT const marionnettiste = require('marionnettiste'); (async () => { const navigateur = wait puppeteer.launch({headless: false}); const page = attendre navigateur.newPage(); attendre page.goto('http://my-url.com'); const bouton = attendre la page.$('button#button'); attendre bouton.evaluate( bouton => bouton.click() ); attendre page.waitForTimeout(5000); ... attendre le navigateur.close(); })(); SCÉNARIO; $process = new Process(['node', '-e', $script]); $process->run(); $output = $process->getOutput();</pre> <p>Lorsque j'essaie d'exécuter uniquement cette partie du code dans le shell du nœud : </p> <pre class="brush:php;toolbar:false;">const marionnettiste = require('marionnettiste'); (async () => { const navigateur = wait puppeteer.launch({headless: false}); const page = attendre navigateur.newPage(); attendre page.goto('http://my-url.com'); const bouton = attendre la page.$('button#button'); attendre bouton.evaluate( bouton => bouton.click() ); attendre page.waitForTimeout(5000); ... attendre le navigateur.close(); })();</pre> <p>Cela fonctionne bien et je peux voir un navigateur ouvert. Lorsque j'essaie d'exécuter toute la fonction, cela ne fonctionne pas. Je pense donc que la façon dont j'exécute le code JS dans le contrôleur est erronée. </p>
P粉098417223
P粉098417223

répondre à tous(1)
P粉077701708

J'ai créé un nouveau fichier js pour le code JavaScript script.js

// script.js

const puppeteer = require('puppeteer');
(async () => {
    const browser = await puppeteer.launch({headless: false});     
    const page = await browser.newPage();
    await page.goto('http://my-url.com');
    const button = await page.$('button#button');
    await button.evaluate( button => button.click() );
    await page.waitForTimeout(5000);
    ...
    await browser.close();
})();

Et dans le contrôleur j'ai effectué les modifications :

$process = new Process(['path/to/node', 'path/to/script.js]);
$process->run();
if(!$process->isSuccessful()) {
  throw new ProcessFailedException($process);
}
$output = $process->getOutput();
$errors = $process->getErrorOutput();

Cela a fonctionné pour moi

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal