Lakukan tindakan Puppeteer dalam pengawal Laravel menggunakan kod JavaScript
P粉098417223
P粉098417223 2023-08-28 09:40:29
0
1
558
<p>Saya menggunakan Puppeteer untuk melancarkan penyemak imbas daripada pengawal laravel, tetapi saya tidak tahu cara menjalankan kod JavaScript daripada pengawal</p> <p>Fungsi saya adalah seperti berikut:</p> <pre class="brush:php;toolbar:false;">$script = <<<SKRIP const puppeteer = memerlukan('puppeteer'); (async () => { pelayar const = tunggu puppeteer.launch({headless: false}); halaman const = tunggu browser.newPage(); tunggu page.goto('http://my-url.com'); butang const = halaman tunggu.$('butang#butang'); tunggu button.evaluate( button => button.click() ); tunggu page.waitForTimeout(5000); ... tunggu browser.close(); })(); SKRIP; $proses = Proses baharu(['nod', '-e', $script]); $proses->jalankan(); $output = $process->getOutput();</pre> <p>Apabila saya cuba menjalankan hanya bahagian kod ini dalam cangkang nod: </p> <pre class="brush:php;toolbar:false;">const puppeteer = memerlukan('puppeteer'); (async () => { pelayar const = tunggu puppeteer.launch({headless: false}); halaman const = tunggu browser.newPage(); tunggu page.goto('http://my-url.com'); butang const = halaman tunggu.$('butang#butang'); tunggu button.evaluate( button => button.click() ); tunggu page.waitForTimeout(5000); ... tunggu browser.close(); })();</pra> <p>Ia berfungsi dengan baik dan saya dapat melihat penyemak imbas dibuka. Apabila saya cuba menjalankan keseluruhan fungsi ia tidak berfungsi. Jadi saya rasa cara saya menjalankan kod JS dalam pengawal adalah salah. </p>
P粉098417223
P粉098417223

membalas semua(1)
P粉077701708

Saya mencipta fail js baharu untuk kod 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();
})();

Dan dalam pengawal saya telah membuat perubahan:

$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();

Ini berkesan untuk saya

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan