近期在学习使用Playwright,总结了几点使用技巧。
-
使用
page.on('response')
获取接口返回结果 -
隐藏WebDriver特征
# 在跳转到url之前,改变window.navigator.webdriver为undefined
js = """
Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});
"""
await page.add_init_script(js)
await page.goto(url)
- 保存cookie并复用
# 保存
storage = context.storage_state(path='data/cookie.json')
# 复用
context = await browser.new_context(storage_state='data/cookie.json')
- 使用
page.locator()
和BeautifulSoup查找元素
可以用但不要过度使用page.locator()
,特别是在循环中,这个方法只是为了找到初始的特定的元素,一旦找到了,就使用BeautifulSoup来处理元素,不然page.locator()
可能会频繁地引发timeout错误,有时传递错的元素属性它也能返回,但实际没有。
div_elements = await page.locator(div_locator).all()
for index, div_element in enumerate(div_elements):
soup = BeautifulSoup(await div_element.inner_html(), 'html.parser')
btn = soup.select_one('.classname')
content_div = soup.find("span", class_="text-underline-hover")
更多用法查看 BS4文档 https://beautiful-soup-4.readthedocs.io/en/latest/ , Playwright文档 https://playwright.dev/docs/locators .