pyppeteer 简明教程
Puppeteer它是一个Node库,提供了一个高级的API来控制DevTools协议上的无头版Chrome,可以自动化控制浏览器运行。pyppeteer是python版的实现。
centos7安装pyppeteer
yum -y install chromium
python3 -m pip install pyppeteer
测试
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://sxy91.com')
await page.screenshot({'path': 'sxy.png'})
await asyncio.sleep(30)
title = await page.title()
print(title)
asyncio.get_event_loop().run_until_complete(main())
会话关闭的解决办法
20秒不操作后会话关闭,会出现错误:Session closed. Most likely the page has been closed
pyppeteer的开发团队似乎比较忙,还没修复。可参考pyppeteer#159,修改源码pyppeteer/connection.py,替换第44行源码。
self._ws = websockets.client.connect(
- self._url, max_size=None, loop=self._loop)
+ self._url, max_size=None, loop=self._loop,ping_interval=None, ping_timeout=None)
使用pyppeteer自动发送微博的例子
import asyncio
from pyppeteer import launch
home_url = 'https://weibo.com/'
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
CHROME_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
img = '/Users/songyangcong/Pictures/6781573623694_.pic.jpg'
async def sendimg(path,headless=False,devtools=False):
browser = await launch(executablePath=path,headless=headless,devtools=devtools,userDataDir='./tmp/userdata',args=['--no-sandbox','--disable-infobars'])
Comments