1

我正在尝试将 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);

请指教正确的方法

4

2 回答 2

2

$eval(选择器, pageFunction[, ...args])

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

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

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

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

于 2019-09-26T10:10:50.807 回答
1

这有效

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();
});
于 2019-09-26T10:01:02.303 回答