使用之前,首先在已新建的虚拟环境下,可以:
pip install playwright
//2.安装相应的封装好的驱动
playwight install
第二步可能网络不好时会下载失败,多尝试,下载后安装在用户的一个隐藏目录下(具体位置忘了)
下面我们对一个网站进行爬虫,并且模拟登录。
from playwright.sync_api import sync_playwright
def main():
with sync_playwright() as p:
browser = p.firefox.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to http://quotes.toscrape.com/
page.goto("http://quotes.toscrape.com/")
page.wait_for_timeout(5000)
# 利用xpath查找指定的标签文字
selector = "//div[@class='tags']/a[@class='tag']"
tag = page.query_selector_all(selector)
# tag实际上是一个list,包含各种对象,利用对象的inner_text方法可以提取文字,并不需要正则
content= [t.inner_text() for t in tag]
print(content)
# Click text=Login
page.click("text=Login")
# assert page.url == "http://quotes.toscrape.com/login"
# Click input[name="username"]
page.click("input[name=\"username\"]")
# Click input[name="username"]
# Fill input[name="username"]
page.fill("input[name=\"username\"]", "123")
# Click input[name="password"]
page.click("input[name=\"password\"]")
# Fill input[name="password"]
page.fill("input[name=\"password\"]", "123")
# click input:has-text("Login")
page.click("input:has-text(\"Login\")")
# assert page.url == "http://quotes.toscrape.com/"
# check
#太快可能看不清是否有点击logout,定义个睡眠时间
page.wait_for_timeout(1000)
selector = '//*[@href="/logout"]'
try:
logout = page.wait_for_selector(selector, timeout=5000)
print(logout.inner_text())
except Exception as e:
print(e)
exit()
# ---------------------
context.close()
browser.close()
if __name__ == '__main__':
main()
这里面的代码有部分是根据脚本录制生成的,playwright的录制功能稳定性较强,但有时如果想等待新页面生成后再去操作,就需要用到wait_for_selector的方法,这个selector一般的xpath,正则,css选择器都可以输入进去,这里运用的是xpath,值得注意的是,当我们获取了div元素里的标签后,实际上在playwright里是一个对象,是需要用到inner_text()的方法提取对象的属性。
result: