类似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')