You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装含await page.click等的代码为函数并调用?

如何提取重复的异步代码为可复用函数并调用?

你在主代码中多次重复使用这段异步操作代码:

(async() => {
// 其他业务代码

try {
        await page.waitForSelector('.css123', {timeout: 5000});
    } catch (e) {
        console.log(error);
    }
    
    try {
        await page.click('.css123');
    } catch (e) {
        console.log(error);
    }

// 其他业务代码
})();

正确的函数封装与调用方式

这段代码依赖Puppeteer的page页面对象,必须将page作为参数传入函数,同时函数需声明为异步类型:

方式1:箭头函数声明

// 封装可复用函数,支持自定义选择器和超时时间
const handleElementClick = async (page, selector = '.css123', timeout = 5000) => {
    try {
        await page.waitForSelector(selector, { timeout });
    } catch (e) {
        console.log('等待选择器超时/失败:', e);
    }
    
    try {
        await page.click(selector);
    } catch (e) {
        console.log('点击元素失败:', e);
    }
};

方式2:普通异步函数声明

// 同样支持自定义参数的普通函数写法
async function handleElementClick(page, selector = '.css123', timeout = 5000) {
    try {
        await page.waitForSelector(selector, { timeout });
    } catch (e) {
        console.log('等待选择器超时/失败:', e);
    }
    
    try {
        await page.click(selector);
    } catch (e) {
        console.log('点击元素失败:', e);
    }
}

在主代码中调用

在异步上下文(比如你的自执行异步函数)中,传入page对象即可调用:

(async() => {
    // 假设已完成page对象的初始化
    // 调用封装好的函数,使用默认选择器和超时
    await handleElementClick(page);
    
    // 如需操作其他元素,可传入自定义参数
    await handleElementClick(page, '.another-selector', 8000);
    
    // 其他业务代码
})();

之前失败的核心原因

你之前尝试的两种函数写法无法工作,本质是没有将依赖的page对象作为参数传入函数,导致函数内部无法访问page实例,自然无法执行waitForSelector和click方法。

内容的提问来源于stack exchange,提问作者issik kul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:17:38