如何使用Puppeteer处理分页中的__doPostBack函数调用?
用Puppeteer处理该分页场景的方案
方法一:直接执行__doPostBack函数(更推荐)
既然已经明确分页触发的是__doPostBack这个JS函数,完全不用非得点击页面元素,直接在页面上下文里执行这个函数就行——这种方式更高效稳定,不用纠结元素是否可见、有没有加载完成这些问题。
示例代码:
// 把targetPage换成你要跳转的页码,比如9、15都可以 const targetPage = 15; await page.evaluate((gridId, pageNum) => { __doPostBack(gridId, `Page$${pageNum}`); }, 'dnn$ctr1205$View$grdvwlstproposicao', targetPage);
不管当前显示的是1-10还是11-20,用这段代码都能直接跳到目标页码。
方法二:模拟用户点击分页元素
如果一定要完全模拟用户点击的行为,也可以通过选择器定位对应的元素,再调用page.click()。
1. 点击初始显示的页码(1-10)
直接通过文本内容定位a标签就行:
// 点击第5页 await page.click('tbody td a:has-text("5")');
或者通过href属性匹配定位:
await page.click('tbody td a[href*="Page$5"]');
2. 点击省略号加载11-20页
先找到显示省略号的td元素,点击它就能加载后续页码:
// 点击初始的省略号,加载11-20页 await page.click('tbody td:has-text("...")'); // 等页面加载完新的页码,比如等11号页码出现 await page.waitForSelector('tbody td a:has-text("11")');
3. 点击前后省略号翻页
加载出11-20页后,会出现两个省略号,分别对应回到1-10和加载21-30,可以通过位置定位:
// 点击最左边的省略号,回到1-10页 await page.click('tbody td:first-child:has-text("...")'); // 点击最右边的省略号,加载21-30页 await page.click('tbody td:last-child:has-text("...")');
关于你提到的page.click(dnn$ctr1205$View$grdvwlstproposicao','Page${i})调用
这种写法是错的,page.click()的参数只能是选择器字符串,不能直接传函数参数。但你可以用上面的方法一直接执行__doPostBack函数,效果和点击对应页码完全一样,而且更灵活。
内容的提问来源于stack exchange,提问作者andrellima
相关产品推荐
相关产品推荐

