Pyppeteer爬虫神器详解( 四 )


  • 选项卡操作
【Pyppeteer爬虫神器详解】前面我们说过 , Page对象就是一个选项卡 , 我们均使用newPage方法创建了 , 那么新建之后怎么获取和切换呢 , 下面看一个例子:
async def main():browser = await launch(headless=False, args=['--disable-infobars'])page = await browser.newPage()await page.goto('https://mp.weixin.qq.com/')page = await browser.newPage()await page.goto('https://www.baidu.com')pages = await browser.pages()print('Pages: ', pages)page1 = pages[1]await page1.bringToFront()await asyncio.sleep(20)await browser.close()我们在这里调用了两次newPage , 访问了两个网站 , 当切换选项卡的时候 , 我们只要用对应页面的page对象调用其bringToFront方法即可 。
  • 常见操作
下面我们再看一些页面的常用操作:加载、前进、后退、关闭、保存
async def main():browser = await launch(headless=False, args=['--disable-infobars'])page = await browser.newPage()await page.goto('https://www.baidu.com')await page.goto('https://pan.baidu.com')# 后退await page.goBack()# 前进await page.goForward()#保存PDFawait page.pdf(path='test.pdf')#截图await page.screenshot()# 设置页面await page.setContent('<h1>Hello World</h1>')# 设置User-Agentawait page.setUserAgent('Python')# 设置Headersawait page.setExtraHTTPHeaders(headers={})# 关闭await page.close()await browser.close()这里有一个PDF保存真的非常方便 , 我之前用selenium保存网页成PDF , 找了很多处理方式 , 还比较麻烦 , Pyppeteer这里就调用一个函数就OK了 , 但是要注意两点 , 否则保存不成功:1. 必须使用无头模式 。2.要指定保存路径path , 否则不会保存在本地 。
  • 输入并点击
模拟鼠标点击和键盘输入事件 。
async def main():browser = await launch(headless=False)page = await browser.newPage()await page.goto('https://www.baidu.com')await page.waitForSelector('#su')await page.type('#kw', 'python')await page.click('#su', options={'button': 'left','clickCount': 1,'delay': 300})await asyncio.sleep(10)await browser.close()click就是点击事件 , 第一个参数是选择器 , 第二个参数是几项配置:
button: 鼠标按钮 , 分为left、middle、right
clickCount: 点击类型 , 如双击、单击
delay:延迟点击
type方法为输入方法 , 第一个参数传入选择器 , 第二个参数传入内容 。
  • 获取网页源码和cookies
content = await page.content()cookies = await page.cookies()
  • 执行js脚本
out_content = await page.evaluate('''() => {return {width: document.documentElement.clientWidth,height: document.documentElement.clientHeight,deviceScaleFactor: window.devicePixelRatio}}''')
  • 延时等待
这个部分相比于selenium又方便了很多 , 可以让页面等待符合某些条件后 , 再向下执行 , 这在我们等待页面加载是非常有用 , 除了我们之前使用过的waitForXPath、waitForSelector还有以下几个:
waitForFunction:等待某个JAVAScript方法执行完毕或返回结果
waitForNavigation:等待页面跳转 , 如果没加载出来就会报错
waitForRequest:等待某个特定请求被发出
waitForResponse:等待某个特定请求收到了回应
waitFor:通用的等待方法
通过等待条件 , 我们就能控制页面加载的情况了 。
 
除了以上我们介绍的东西 , 还有鼠标模拟拖动也是比较重要的 , 这在模拟滑动验证码的时候是非常有用的 , 我们后面再开一篇吧 。




推荐阅读