如何将 json 对象传递给 $eval 函数

How to pass json object to $eval function

我试图将 json 传递给函数但没有成功 这是我到目前为止尝试过的

await aHandle.$eval('input[name="date"]', (el) => (el.value =input.date)(input) );

或者像这样

await aHandle.$eval('input[name="date"]', (el) => (el.value =input.date),input );

或者像这样

await aHandle.$eval('input[name="date"]', (el) => (el.value =input.date) ).(input);

请指教正确的方法

这个有效

const Apify = require('apify');

Apify.main(async () => {
    const q = await Apify.openRequestQueue();
    await q.addRequest({ url: 'http://example.com' })

    const c = new Apify.PuppeteerCrawler({
        requestQueue: q,
        handlePageFunction: async ({ page }) => {
            const inputServerSide = {
                date: '2019-09-26'
            };
            const aHandle = await page.$('div');
            await aHandle.$eval('h1', (el, inputClientSide) => {
                el.name = inputClientSide.date;
            }, inputServerSide );
            const name = await page.$eval('h1', (el) => el.name);
            console.log('Name:', name);
        }
    })

    await c.run();
});

$eval(selector, pageFunction[, ...args])

args/arguments是序列化的,所以你可以像这样传递句柄和额外的数据。

await aHandle.$eval(selector, (yourElementHandle, yourJsonData) => {
  yourElementHandle.value = yourJsonData.username
}, (yourJsonData) ); // <-- pass the handle and data here

基本上,您在该函数之后传递的任何内容都将被序列化并按该顺序在该函数中供您使用。

即使不放置大括号 () 也应该可以工作,因为它在传播参数。