javascript - PHP 使用 Puppeteer 调用 JS
问题描述
我有两个文件。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 文件。
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 完成这项工作?
解决方案
推荐阅读
- excel-formula - 是否可以在公式中将数组转换为另一个数组?
- ada - 如何将 Doubly_Linked_Lists 文本保存到 Ada 语言的文件中?还有如何没有固定大小的字符串输入?
- flutter - 如何在 Flutter 中实现用户消息窗口?
- c++ - 如何转换地图
从 c++11 到 c++98? - azure - 如何使用计时器触发器和 PowerShell 在 azure 函数中调用调用图 api
- python - 在 Python 中的列表列表中搜索/查找
- javascript - 如果子数组包含项目,则使用 Javascript 过滤 JSON 对象
- java - Java 线程对象如何调用原始类中的方法?
- excel - Excel - 将分号分隔的值分组到单独的行中 - 维护第一列
- python - os.path.getsize() 在网络驱动器上不起作用