首页 > 解决方案 > PHP 使用 Puppeteer 调用 JS

问题描述

我有两个文件。pop.phppop.js

<?php

    $io = [
        0 => ['pipe', 'r'], // node's stdin
        1 => ['pipe', 'w'], // node's stdout
        2 => ['pipe', 'w'], // node's stderr
    ];

    $proc = proc_open('node pop.js', $io, $pipes);

    $nodeStdout = $pipes[1]; // our end of node's stdout
    echo date('H:i:s '), fgets($nodeStdout);

    proc_close($proc);
    echo date('H:i:s '), "done\n";

?>

这是我的 JS 文件。

const puppeteer = require('puppeteer');
var cardsArray = [];

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://www.psacard.com/Pop/GetItemTable?headingI2510&categoryID=20019&isPSADNA=false&pf=0&_=1583525404214");

  const tr = await page.evaluate(() => {

    const rowNodeList = document.querySelectorAll('table tr');
    const rowArray = Array.from(rowNodeList);

    return rowArray.slice(1).map(tr => {
        const dataNodeList = tr.querySelectorAll('td');
        const dataArray = Array.from(dataNodeList);
        const [ cardNumber, cardType, c, d, psa1, psa1h, psa2, psa3, psa4, psa5, psa6, psa7, psa8, psa9, psa10, popTotal ] = dataArray.map(td => td.textContent.replace(/\s+/g, ' ').replace(/\s+Shop/g, ' ').substring(1));

        return {
            cardNumber, 
            cardType, 
        psa1: psa1.split(" ")[0], 
        psa1h: psa1h.split(" ")[0],
        psa2: psa2.split(" ")[0],
        psa3: psa3.split(" ")[0],
        psa4: psa4.split(" ")[0],
        psa5: psa5.split(" ")[0],
        psa6: psa6.split(" ")[0],
        psa7: psa7.split(" ")[0],
        psa8: psa8.split(" ")[0],
        psa9: psa9.split(" ")[0],
        psa10: psa10.split(" ")[0],
        popTotal: popTotal.split(" ")[0]
        };
    });
  });

    const getName = tr.map(card => {
        if (card.cardNumber === '248 ') {
            console.log(card);
            cardsArray.push(card);
        }
    })

    process.stdout.write(JSON.stringify(cardsArray)+"\n");
  await browser.close();
})();

我从 JS 文件中得到的响应是一个空数组,所以我不认为 puppeteer 正在运行。当我在没有 PHP 的情况下调用 js 文件时,我从 puppeteer 获得了实际结果。有没有办法通过 PHP 完成这项工作?

标签: javascriptphppuppeteer

解决方案


推荐阅读