python PlayWright爬虫 支持JS 类似selenium

类似selenium一样的工具来了

Playwright

pip install playwright
playwright install 
#执行以上命令完成安装

快捷使用教程

  • locator 可以点击 填充 迭代
  • query_selector 只能查询,且单元素
  • query_selector_all可以迭代
  • all()链式可以在locator后用于迭代
  • text_content 获得信息 get_attribute获得属性 inner_html获得HTML内容

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器
    browser = p.chromium.launch(headless=False)
    # 打开新页面
    page = browser.new_page()
    # 导航到网页
    page.goto('https://example.com')
    # 获取页面标题
    print(page.title())
    page.locator("#kkk").click()
    page.locator("#kk_input").fill("MXMX")
    page.locator("#text_value").get_attribute("src")
    page.locator("#text_value").text_content()


    # 获取所有匹配的元素 方法通常使用all()链式操作
    list_items = page.locator('ul#myList li').all()

    # 遍历元素并打印文本内容
    for item in list_items:
        print(item.text_content())
    
    # 获取所有匹配的元素 ,定位到父元素下的所有子列表项
    list_items = page.locator('ul#myList li') 
    # 使用 for 循环迭代子元素 必须使用nth 较为不方便
    for i in range(list_items.count()):
        # 获取每个子元素的文本内容
        text = list_items.nth(i).text_content()
        print(f'Item {i}: {text}')

    #使用query_selector 和query_selector_all两个方法重写了
    list_items = page.query_selector_all('ul#myList li')    
    # 遍历元素并打印文本内容
    for item in list_items:
        print(item.text_content())

    # 关闭浏览器
    browser.close()

关于UA和Cookie

cookies_data = [
    {
        'name': 'cookie_name',
        'value': 'cookie_value',
        'domain': 'example.com'
    },
    # 添加其他 Cookie 数据
]  
#UA在设置浏览器的时候创建
browser = playwright.chromium.launch(
        headless=False,
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
    )

#cookie设置
context = browser.new_context()
context.set_cookies(cookies_data)
page = browser.new_page()
# UA在后面也可以设置 ,header内信息可以统一设置通过 page.et_extra_http_headers()
其中的header输入需要传入的header值。

page.set_extra_http_headers(
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
        }
    )

page.goto("https://www.baidu.com/")

截图(可以截图特定元素的截图,比selenium高级)

#截图整个页面
page.screenshot(path='example.png')


# 截取视窗的可见部分
page.screenshot(path='visible_part.png', full_page=False)


# 截取特定元素的截图
element = page.locator('selector')  # 替换为你想要截图的元素选择器
element.screenshot(path='element.png')

发表回复