Playwright使用技巧

近期在学习使用Playwright,总结了几点使用技巧。

  1. 使用page.on('response')获取接口返回结果

  2. 隐藏WebDriver特征

# 在跳转到url之前,改变window.navigator.webdriver为undefined
js = """
     Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});
"""

await page.add_init_script(js)
await page.goto(url)
  1. 保存cookie并复用
# 保存
storage = context.storage_state(path='data/cookie.json')

# 复用
context = await browser.new_context(storage_state='data/cookie.json')
  1. 使用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 .

Leave a Comment

豫ICP备19001387号-1