欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Playwright 自动化测试与爬虫快速入门指南

Playwright 自动化测试与爬虫快速入门指南

2025/5/5 9:13:15 来源:https://blog.csdn.net/qq_35732986/article/details/143605383  浏览:    关键词:Playwright 自动化测试与爬虫快速入门指南

1. 环境配置

# 安装 Playwright
pip install playwright# 安装浏览器驱动
playwright install

2. 基础用法

2.1 基本结构

from playwright.sync_api import sync_playwrightdef main():with sync_playwright() as p:# 启动浏览器,headless=False 可以看到浏览器界面browser = p.chromium.launch(headless=False)context = browser.new_context()page = browser.new_page()# 访问网页page.goto('https://example.com')# 关闭浏览器browser.close()if __name__ == '__main__':main()

2.2 元素定位方法

# 1. 使用 Playwright Inspector(推荐)
# python -m playwright codegen https://example.com# 2. 常用选择器
page.click('text=按钮文字')           # 文本选择器
page.click('role=button')             # 角色选择器
page.click('.class-name')             # CSS 选择器
page.click('#id-name')                # ID 选择器
page.click('[data-testid=test-id]')   # 测试 ID 选择器
page.click('xpath=//button')          # XPath 选择器# 3. 组合选择器
page.click('.container >> text=点击这里')

2.3 基本操作

# 点击
page.click('button')# 输入文本
page.fill('input[name="username"]', '用户名')# 等待元素
page.wait_for_selector('.loading', state='hidden')# 获取文本
text = page.text_content('.content')# 截图
page.screenshot(path='screenshot.png')

3. 反爬虫策略

3.1 基础配置

def create_stealth_browser():with sync_playwright() as p:browser = p.chromium.launch(headless=True,args=['--disable-blink-features=AutomationControlled','--disable-infobars','--window-size=1920,1080','--start-maximized'])context = browser.new_context(viewport={'width': 1920, 'height': 1080},user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',java_script_enabled=True,ignore_https_errors=True)return browser, context

3.2 高级反爬策略

async def setup_stealth_page(context):page = await context.new_page()# 注入 JavaScript 以修改浏览器特征await page.add_init_script("""Object.defineProperty(navigator, 'webdriver', {get: () => undefined});""")# 设置地理位置await context.grant_permissions(['geolocation'])await page.set_geolocation({"latitude": 40.71, "longitude": -74.01})# 添加随机延时await page.set_default_timeout(random.randint(30000, 60000))return page# 随机延时函数
async def random_sleep():await asyncio.sleep(random.uniform(2, 5))

3.3 代理设置

def create_proxy_context(playwright):return playwright.chromium.launch(proxy={"server": "http://proxy-server:port","username": "user","password": "pass"})

3.4 Cookie 和 Session 管理

# 保存 Cookie
storage = context.storage_state(path="auth.json")# 使用已保存的 Cookie
context = browser.new_context(storage_state="auth.json")

4. 高级功能

4.1 请求拦截

def handle_route(route):if route.request.resource_type == "image":route.abort()  # 阻止加载图片else:route.continue_()page.route("**/*", handle_route)

4.2 监听网络请求

def log_request(request):print(f"URL: {request.url}")print(f"Method: {request.method}")print(f"Headers: {request.headers}")page.on('request', log_request)

4.3 异步模式

from playwright.async_api import async_playwright
import asyncioasync def main():async with async_playwright() as p:browser = await p.chromium.launch()page = await browser.new_page()await page.goto('https://example.com')await browser.close()asyncio.run(main())

5. 实战示例

5.1 登录自动化

async def login(page, username, password):await page.goto('https://example.com/login')await page.fill('input[name="username"]', username)await page.fill('input[name="password"]', password)# 等待验证码加载(如果有)await page.wait_for_selector('.captcha-image')# 处理验证码(示例)captcha = await solve_captcha(page)await page.fill('input[name="captcha"]', captcha)await page.click('button[type="submit"]')await page.wait_for_navigation()

5.2 数据采集

async def scrape_data(page):data = []# 随机延时await random_sleep()# 获取数据elements = await page.query_selector_all('.item')for element in elements:title = await element.text_content()data.append({'title': title,'timestamp': datetime.now()})return data

6. 最佳实践

  1. 错误处理
try:await page.click('button')
except TimeoutError:print("元素未找到")
except Exception as e:print(f"发生错误: {e}")
  1. 性能优化
# 禁用图片和样式表加载
await context.route('**/*.{png,jpg,jpeg,gif,css}', lambda route: route.abort())# 设置请求超时
page.set_default_navigation_timeout(30000)
  1. 定期清理资源
# 定期清理浏览器上下文
async def cleanup():contexts = browser.contextsfor context in contexts:await context.close()await browser.close()

7. 调试技巧

  1. 使用 page.pause() 进行调试

  2. 开启详细日志:设置环境变量 DEBUG=pw:api

  3. 保存页面快照:page.screenshot()

  4. 使用 Playwright Inspector 进行元素定位

8. 注意事项

  1. 遵守网站的 robots.txt 规则

  2. 合理控制请求频率

  3. 做好异常处理和重试机制

  4. 定期更新 User-Agent 和代理

  5. 数据及时保存,避免丢失

  6. 注意内存管理,及时释放资源

这个教程涵盖了 Playwright 的主要使用方法和反爬虫策略。建议在实际使用时,根据具体需求选择合适的功能组合,并且要注意遵守网站的使用条款和爬虫规则。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词