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

时间:2019-09-26 09:41:22

标签: puppeteer apify

我正在尝试将json传递给函数,但未成功 这是我到目前为止尝试过的

    map<int,int> count,freq_count;
    ll i,j,k,n,m,mask,x;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>x>>m;
        if(x==1){
            if(count.find(m)!=count.end()){
                freq_count[count[m]]--;
                if(freq_count[count[m]] == 0)
                    freq_count.remove(count[m]);
            }
            count[m]++;
            frefreq_count[count[m]]++;
        } else if(x==2) {
            freq_count[count[m]]--;
            if(freq_count[count[m]] == 0)
                freq_count.remove(count[m]);
            if(count[m]==0)
                count.remove(m);

        } else {
            if(freq_count.find(m)!= freq_count.end()){
                cout<<"1\n";
            }
            else{
                count<<"0\n";
            }
        }
    }

或类似的

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

或类似的

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

请告知正确的方法

2 个答案:

答案 0 :(得分:2)

  

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

args /参数已序列化,因此您可以像这样传递句柄和其他数据。

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

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

由于它分散了参数,因此即使不加括号(),它也应该可以工作。

答案 1 :(得分: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();
});