嗨,各位Python程序员,放弃selenium,试试年轻的Playwright如何?
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
⛳️ 实战场景
上一篇博客我们首次接触年轻的自动化模块 playwright
,惊讶于其代码录制功能,今天咱们接着学习一下,其 API 相关知识。
正式学习前,先把基础示例代码呈现给大家。
```python from playwright.sync_api import sync_playwright
with sync_playwright() as p: browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("http://example.com")
print(page.title())
browser.close()
```
注意上述代码使用的不是无头浏览器,运行代码得到请求站点的标题,下面继续对代码进行扩展。
⛳️ 实现浏览器截图
通过浏览器打开站点之后,可以对网页默认展示区域进行截图操作,代码如下:
```python from playwright.sync_api import sync_playwright
with sync_playwright() as p: browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("http://example.com")
page.screenshot(path="example.png")
browser.close()
```
在运行目录生成如下图片:
⛳️ 将截图代码优化为异步模式
上述截图代码为同步模式,可以进行简单的修改,从而调整为异步模式。
```python import asyncio from playwright.async_api import async_playwright
async def main(): async with async_playwright() as p: browser = await p.chromium.launch(headless=False) page = await browser.new_page() await page.goto('http://example.com') await page.screenshot(path='example.png') await browser.close()
asyncio.get_event_loop().run_until_complete(main()) ```
这里一定要注意 async_playwright
和 sync_playwright
导入模式,互联网很多博客这里都写错误,也不知道他们的代码是怎么运行起来的,对比代码如下所示:
python
from playwright.async_api import async_playwright # 异步导入
from playwright.sync_api import sync_playwright # 同步导入
⛳️ 模拟手机端访问
模拟手机操作用到的核心方法如下所示:
p.devices[phone_name]
:选择设备名,可以从谷歌浏览器的开发者工具中进行选择,截图在代码后。browser.new_context()
:初始化浏览器的时候,可以进行参数配置。
```python from playwright.sync_api import sync_playwright # 同步导入
with sync_playwright() as p: phone_name = 'iPhone 13' iphone_13 = p.devices[phone_name] browser = p.webkit.launch(headless=False) context = browser.new_context( **iphone_13, locale='zh-CN' ) page = context.new_page() page.goto('https://baidu.com') page.screenshot(path=f'{phone_name}.png') # browser.close() ```
可以选择的设备名称(包含但不限于!)
运行上述代码,可以模拟手机访问效果。
本篇博客最后补充的知识点是 browser.new_context()
方法的详细参数说明(全网首发)。
accept_downloads
:布尔类型,是否自动下载所有附件,默认为True
;base_url
:根路径,这个参数要配合goto()
,route()
方法使用;bypass_csp
:布尔类型,跨域攻击配置;device_scale_factor
:设备比例基数,默认是1.0
;extra_http_headers
:字典对象,每个请求发送的附加 HTTP 头的对象;geolocation
:地理位置,字典格式,包含经纬度,以及精度;ignore_https_errors
:发送网络请求时是否忽略 HTTPS 错误;is_mobile
:是否考虑 meta-viewport 标记并启用触摸事件,不支持火狐;java_script_enabled
:是否支持 JS;locale
:指定用户区域设置;no_viewport
:不强制固定窗口,允许在标题模式下调整窗口大小;offline
:是否离线模式;proxy
:代理设置;storage_state
:用户状态设置,例如cookies
,origins
。user_agent
:用户代理设置;viewport
:窗口大小,默认 1280*720,也可以通过字典设置宽度和高度。
📢📢📢📢📢📢 💗 你正在阅读 【梦想橡皮擦】 的博客 👍 阅读完毕,可以点点小手赞一下 🌻 发现错误,直接评论区中指正吧 📆 橡皮擦的第 730 篇原创博客
- 嗨,各位Python程序员,放弃selenium,试试年轻的Playwright如何?
- 09年的老电脑说想看一下CPU温度,作为Python工程师,怎能安装X大师?
- 如果你需要用Python搞个二维码,那应该收藏这篇博客
- 写给Python社群的第2课:Python逻辑语句,天天要写的 if 和 while
- 嗨,程序员,你知道高级工程师用的搜索引擎吗?
- 都2022年了,Python Web框架你不会只知道Django和Flask吧?
- 在座的Python爬虫工程师,你敢爬律师事务所站点吗?
- Python爬虫反爬,你应该从这篇博客开启,UA反爬,Cookie 特定参数反爬
- OpenGauss数据库在 CentOS 上的实践,配置篇
- 【Python技能树共建】动态渲染页面爬取
- 【Python技能树共建】Beautiful Soup
- 【首发字体反爬】猫X眼YingShi,我们又来欺负你了,用到了 OCR 识别技术
- 【首发】某易跟帖篇频道,接口溯源分析,反爬新技巧,必掌握一下
- 【首发】Python反爬,JS反爬串讲,从MAOX眼X开始,本文优先解决反爬参数 signKey
- 【首发】写Python爬虫,服务器返回数据加密了,套路解决法~,出版社,出版社
- 虎牙直播数据采集,为数据分析做储备,Python爬虫120例之第24例
- 我们的骄傲!非遗数据采集,来自官方的数据,Python爬虫无所不爬
- 3天掌握Flask开发项目系列博客之二,操作数据库
- 写给Python社群的第1课:初识Python,开篇知识点就选字符串吧~
- 升级【爸爸程序员】了?用Python给自己的宝贝下载200 绘本动画吧!