pip3.6 install pyppeteer pyppeteer-install.exe # 安装 chromium 浏览器到 pyppeteer 的默认位置
pyppeteer-install 第一次运行pyppeteer时,它将下载最新版本的Chromium
import asyncio from pyppeteer import launch async def main(): browser = await launch(headless=True, dumpio=True, autoClose=False, args=[‘--no-sandbox‘, ‘--window-size=1920,1080‘, ‘--disable-infobars‘]) # 进入有头模式 page = await browser.newPage() # 打开新的标签页 # 设置浏览器头 # await page.setUserAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5") # 设置页面视图大小 await page.setViewport({‘width‘: 1920, ‘height‘: 1080}) # 是否启用JS,enabled设为False,则无渲染效果 await page.setJavaScriptEnabled(enabled=True) # evaluate()是执行js的方法,js逆向时如果需要在浏览器环境下执行js代码的话可以利用这个方法 临时修改浏览器属性中的 webdriver 属性 # await page.evaluate(‘‘‘() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }‘‘‘) # 将一段 js 代码加载到页面文档中,当发生页面导航、页面内嵌框架导航的时候加载的 js 代码会自动执行,那么当页面刷新的时候该 js 也会执行,这样就保证了修改网站的属性持久化的目的 await page.evaluateOnNewDocument(‘‘‘() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }‘‘‘) # 访问的网站 await asyncio.sleep(1) # 等待 # 访问主页 timeout:超时时间 res = await page.goto(‘http://news.baidu.com/‘, options={‘timeout‘: 100000}) await asyncio.sleep(2) # 等待 print("resp_headers:{}".format(res.headers)) # 响应头 print("resp_status:{}".format(res.status)) # 响应状态 print("cookies:{}".format(await page.cookies())) # 打印页面cookies print("title:{}".format(await page.title())) # 打印当前页标题 await asyncio.sleep(1) # print("content:{}".format(await page.content())) # 获取所有 html 内容 await asyncio.sleep(1) await page.screenshot({‘path‘: ‘./qimai.jpg‘}) # 截图保存路径 await page.pdf({"path": "./qimai.pdf", "format": ‘A4‘}) # 保存 PDF elements = await page.xpath(‘//*[@id="pane-news"]/div/ul/li/strong/a/@href‘) print("*" * 200) print("elements:{}".format(elements)) for i in elements: print(i) await asyncio.sleep(1000) # 等待 await browser.close() # 关闭浏览器 if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) # 调用
原文:https://www.cnblogs.com/yoyo1216/p/14522251.html