Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP使用Puppeter调用JS_Javascript_Php_Puppeteer - Fatal编程技术网

Javascript PHP使用Puppeter调用JS

Javascript PHP使用Puppeter调用JS,javascript,php,puppeteer,Javascript,Php,Puppeteer,我有两个文件pop.php和pop.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);

我有两个文件
pop.php
pop.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文件中得到的响应是一个空数组,所以我不认为正在运行Puppeter。当我在没有PHP的情况下调用js文件时,我从Puppeter获得了实际结果。有没有办法从PHP中实现这一点?

如果节点提供pop.js,它是否有URL?您是否可以向它发出HTTP请求,而不是使用进程/管道等?它可能会更容易使用。我现在正在本地测试一切,我还没有将它上传到我的服务器。如果我将一个基本的{“foo”:“bar}发布到JSON.stringify中,它会工作。。。但是它没有从JS代码中获得数组。你可以在本地运行web服务器,这不是一个应该阻止你的问题老实说,我不确定我要找什么,但是在本地运行php web服务器,这将是您需要为其运行服务器的节点应用程序——我建议PHP代码向节点应用程序发出HTTP请求。如果您进行了配置,则可以从同一个Web服务器为这两个站点提供服务。
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();
})();