puppeteer-API备忘
1.API
1.获取某个元素的文本采用下面的方式:
1  | let text = await.page.$eval('query', ele => ele.textContent); /* 其中text就是该dom元素所对应的文本 */  | 
2.测试页面中是否存在某个元素:
1  | page.waitForSelector('query').then(() => {}, () => {console.error('要检查的元素不存在')});  | 
3.获取某个响应的数据:
1  | page.on('requestfinished', request => {  | 
4.获取当前页面的url:
1  | await page.click('query').then(() => {  | 
5.模拟输入enter:
1  | await page.keyboard.press('Enter');  | 
2.小技巧
1.遇到一些问题,加入有一个交互是这样的,点击button.dropdown-toggle,UI表现上展开ul.dropdown-menu列表数据。在这种场景下我们希望列表数据中的第二项,那应该这样写:
1  | // 模拟点击button.dropdown-toggle  | 
2.某些用户产生的交互行为会触发网络请求,那么怎么捕获监听呢?思路:模拟产生交互的行为,在其返回的promise的resolve cb里面使用page去监听requestfinished事件,如下所示:
1  | await page.click('ul.dropdown-menu li:nth-of-type(2) a').then(async () => {  | 
3.近期做项目遇到一个问题,那就是localStorage丢失的问题,思前想后才发现上一个页面的域名是HTTPS(在上个页面写的localStorage),而下个页面成了http,这就解释了为什么localStorage为什么会丢失的问题了。毕竟localStorage特定于页面的协议。有可能是第二个页面引入了某个非https的协议,所以降成了http。
4.page.$eval方法怎么使用,用处是什么?,先看下面示例代码:
1  | await page.$eval(  | 
page.$eval方法相当于执行document.querySelector(),并且将match到的结果作为callback的第一个参数,而$eval方法所返回的结果就是callback所返回的结果,如果callback返回的是一个promise的话,那么会等待直到promise被决议。函数的第三个参数如果提供了的话,那么将会作为callback方法的第二个参数。
5.我想摸你按下回车。代码如下所示:
1  | await page.keyboard.press("Enter");  |