sem网络推广是什么,网站开发 seo,湛江网站建设价格,国内4g无法登录WordpressPlaywright是微软推出的新一代浏览器自动化库#xff0c;相比Selenium#xff0c;它原生支持异步操作、跨浏览器#xff08;Chrome/Firefox/Edge/Safari#xff09;、自动等待元素加载、内置反爬规避能力#xff0c;且无需额外下载浏览器驱动#xff0c;成为爬虫、自动化…Playwright是微软推出的新一代浏览器自动化库相比Selenium它原生支持异步操作、跨浏览器Chrome/Firefox/Edge/Safari、自动等待元素加载、内置反爬规避能力且无需额外下载浏览器驱动成为爬虫、自动化测试领域的主流选择。一、Playwright核心优势为何能替代Selenium对比SeleniumPlaywright的核心优势一目了然也是其快速普及的关键特性PlaywrightSelenium驱动依赖内置浏览器驱动无需手动下载需手动匹配浏览器版本下载驱动易出错等待机制自动等待元素加载无需手动设置显式/隐式等待需手动配置等待易因元素未加载完成报错浏览器支持原生支持Chrome、Firefox、Edge、Safari对Safari支持差需额外配置操作模式同步/异步双模式异步效率更高仅同步为主异步需额外封装反爬规避内置隐藏自动化特征不易被检测易被识别为自动化工具需手动配置反爬功能丰富度支持截图、录屏、网络拦截、移动端模拟基础功能完善高级功能需额外插件二、Playwright入门准备环境搭建1. 安装Playwright库# 安装Playwright核心库pipinstallplaywright# 安装浏览器驱动Chrome/Firefox/webkit/Safariplaywrightinstall说明playwright install会自动下载对应系统的浏览器二进制文件无需手动匹配版本解决了Selenium驱动版本不兼容的痛点。2. 验证环境# 同步模式验证fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# 启动Chrome浏览器headlessFalse显示浏览器窗口browserp.chromium.launch(headlessFalse)# 打开新页面pagebrowser.new_page()# 访问百度首页page.goto(https://www.baidu.com)# 打印页面标题输出“百度一下你就知道”则环境正常print(page.title())# 关闭浏览器browser.close()三、Playwright核心操作页面与浏览器控制Playwright分为同步模式sync_api和异步模式async_api同步模式适合入门异步模式效率更高适合批量爬取。1. 基础浏览器操作同步模式fromplaywright.sync_apiimportsync_playwright# 上下文管理器自动管理浏览器生命周期withsync_playwright()asp:# 启动浏览器可选参数headlessFalse显示窗口slow_mo500放慢操作速度browserp.chromium.launch(headlessFalse,slow_mo500# 每个操作延迟500ms便于观察)# 创建浏览器上下文可设置代理、UA等contextbrowser.new_context(user_agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)# 打开新页面pagecontext.new_page()# 核心页面操作page.goto(https://www.baidu.com)# 访问URLpage.reload()# 刷新页面page.go_back()# 后退page.go_forward()# 前进# 获取页面信息print(当前URL,page.url)print(页面标题,page.title())print(页面源码,page.content())# 获取渲染后的完整HTML# 关闭页面和浏览器page.close()browser.close()2. 异步模式推荐批量操作importasynciofromplaywright.async_apiimportasync_playwrightasyncdefmain():asyncwithasync_playwright()asp:# 启动浏览器browserawaitp.chromium.launch(headlessFalse)contextawaitbrowser.new_context()pageawaitcontext.new_page()awaitpage.goto(https://www.baidu.com)print(awaitpage.title())awaitbrowser.close()# 执行异步函数asyncio.run(main())3. 窗口与标签页管理fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browserp.chromium.launch(headlessFalse)contextbrowser.new_context()# 打开第一个标签页page1context.new_page()page1.goto(https://www.baidu.com)# 打开第二个标签页page2context.new_page()page2.goto(https://www.taobao.com)# 获取所有标签页pagescontext.pagesprint(标签页数量,len(pages))# 切换到第一个标签页page1.bring_to_front()# 关闭第二个标签页page2.close()browser.close()四、核心技能元素定位与用户操作Playwright支持多种元素定位方式且自动等待元素可操作默认等待30秒无需像Selenium一样手动设置显式等待。1. 元素定位方式优先级排序定位方式代码示例适用场景ID定位page.locator(#kw)元素有唯一IDClass定位page.locator(.s_ipt)元素Class属性唯一属性定位page.locator([namewd])按任意属性定位XPath定位page.locator(//input[idkw])复杂层级定位CSS选择器page.locator(div.s_form input)高效定位推荐文本定位page.locator(text百度一下)按元素文本精准匹配模糊文本page.locator(text/百度.*/)正则匹配文本2. 常用用户操作1输入与清空fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browserp.chromium.launch(headlessFalse)pagebrowser.new_page()page.goto(https://www.baidu.com)# 定位搜索框并输入内容search_boxpage.locator(#kw)search_box.fill(Playwright教程)# 输入文本search_box.clear()# 清空输入框search_box.fill(Python自动化)# 重新输入browser.close()2点击操作# 定位搜索按钮并点击search_btnpage.locator(#su)search_btn.click()# 模拟回车键替代点击search_box.press(Enter)# 双击操作page.locator(text设置).dblclick()# 右键点击page.locator(#kw).click(buttonright)3滚动页面# 滚动到页面底部page.evaluate(window.scrollTo(0, document.body.scrollHeight))# 滚动到指定元素位置自动等待元素可见targetpage.locator(#target_id)target.scroll_into_view_if_needed()# 模拟键盘滚动PageDownpage.keyboard.press(PageDown)4处理下拉框# 定位下拉框并选择选项selectpage.locator(#select_id)# 按文本选择select.select_option(label选项文本)# 按值选择select.select_option(valueoption_value)# 按索引选择select.select_option(index1)# 获取所有选项optionsselect.locator(option).all_text_contents()print(下拉框选项,options)5处理iframe框架# 定位iframe并切换自动等待iframe加载iframepage.frame_locator(#iframe_id)# 操作iframe内元素iframe.locator(#inner_btn).click()6处理弹窗# 监听alert弹窗并自动确认page.on(dialog,lambdadialog:dialog.accept())# 触发弹窗操作page.locator(text触发弹窗).click()# 获取弹窗文本defhandle_dialog(dialog):print(弹窗文本,dialog.text())dialog.accept()page.on(dialog,handle_dialog)五、进阶技巧反爬规避与效率优化1. 无界面模式后台运行fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# 启动无界面模式默认headlessTrue新版为headlessnewbrowserp.chromium.launch(headlessnew)pagebrowser.new_page()page.goto(https://www.baidu.com)print(page.title())browser.close()2. 规避自动化检测核心优势Playwright默认隐藏了大部分自动化特征无需复杂配置即可规避常规检测fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# 创建上下文时配置反爬参数contextp.chromium.launch_persistent_context(./browser_data,# 持久化浏览器数据缓存、CookieheadlessFalse,args[--disable-blink-featuresAutomationControlled,--no-sandbox,# 禁用沙箱模式--start-maximized# 窗口最大化],# 禁用自动化提示ignore_default_args[--enable-automation],)pagecontext.new_page()page.goto(https://example.com)# 验证是否被检测访问自动化检测页面page.goto(https://bot.sannysoft.com/)input(按回车关闭浏览器...)context.close()3. 网络拦截与请求控制Playwright可拦截、修改、阻断网络请求适合爬取动态数据时过滤无关请求fromplaywright.sync_apiimportsync_playwrightdefhandle_request(request):# 阻断图片、视频请求提升加载速度ifrequest.resource_typein[image,video]:request.abort()else:request.continue_()withsync_playwright()asp:browserp.chromium.launch(headlessFalse)pagebrowser.new_page()# 注册请求拦截器page.route(**/*,handle_request)page.goto(https://www.taobao.com)browser.close()4. 截图与录屏fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browserp.chromium.launch(headlessFalse)pagebrowser.new_page()page.goto(https://www.baidu.com)# 页面全屏截图page.screenshot(pathbaidu_page.png,full_pageTrue)# 元素截图page.locator(#kw).screenshot(pathsearch_box.png)# 录屏需安装ffmpegplaywright install ffmpegcontextbrowser.new_context(record_video_dir./videos/)page2context.new_page()page2.goto(https://www.taobao.com)page2.click(text首页)context.close()# 关闭上下文时自动保存视频browser.close()六、实战案例爬取JS动态加载的商品数据以某电商平台商品列表为例JS动态加载爬取商品名称、价格、销量对比Selenium更简洁高效fromplaywright.sync_apiimportsync_playwrightimporttimedefcrawl_goods():withsync_playwright()asp:# 启动浏览器browserp.chromium.launch(headlessFalse,slow_mo200)pagebrowser.new_page()# 访问商品列表页page.goto(https://xxx.com/goods-list)# 滚动加载更多商品模拟翻页for_inrange(3):# 滚动到页面底部page.evaluate(window.scrollTo(0, document.body.scrollHeight))# Playwright自动等待无需手动sleep此处为模拟用户操作间隔time.sleep(1)# 定位所有商品元素并提取信息goods_listpage.locator(.goods-item).all()forgoodsingoods_list:# 提取商品名称自动等待元素可见namegoods.locator(.goods-name).inner_text()# 提取价格pricegoods.locator(.goods-price).inner_text()# 提取销量salesgoods.locator(.goods-sales).inner_text()print(f商品名称{name}价格{price}销量{sales})browser.close()if__name____main__:crawl_goods()七、Playwright vs Selenium迁移指南若已有Selenium代码可按以下规则快速迁移到PlaywrightSelenium操作Playwright对应操作driver.get(url)page.goto(url)driver.find_element(By.ID, kw)page.locator(#kw)element.send_keys(text)locator.fill(text)element.click()locator.click()driver.page_sourcepage.content()WebDriverWait(driver, 10).until(EC.visibility_of_element_located)locator.wait_for()Playwright自动等待无需手动调用driver.switch_to.frame(iframe)page.frame_locator(iframe_locator)八、常见问题与避坑指南元素定位失败Playwright的locator默认等待元素可操作若仍失败检查是否在iframe内用frame_locator避免使用绝对XPath优先用CSS选择器或文本定位。浏览器启动失败无权限时添加args[--no-sandbox]Windows系统需确保Playwright下载的浏览器路径无中文。反爬检测启用持久化上下文launch_persistent_context模拟真实用户浏览器数据避免短时间高频操作添加随机间隔。异步模式报错确保异步函数嵌套正确避免同步/异步混用Windows系统需安装asyncio最新版pip install --upgrade asyncio。