recherche

Maison  >  Questions et réponses  >  le corps du texte

Effectuer des actions Puppeteer dans le contrôleur Laravel à l'aide du code JavaScript

<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粉098417223P粉098417223498 Il y a quelques jours570

répondre à tous(1)je répondrai

  • P粉077701708

    P粉0777017082023-08-29 00:16:15

    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

    répondre
    0
  • Annulerrépondre