CSS选择器定位元素
学习网址:/stock.html
from playwright.sync_api import sync_playwright
# 启动 playwright driver 进程
p = sync_playwright().start()
# 启动浏览器,返回 Browser 类型对象
browser = p.chromium.launch(headless=False)
# 创建新页面,返回 Page 类型对象
page = browser.new_page()
page.goto(r"E:\playwright\stock.html")
print(page.title()) # 打印网页标题栏
# 输入通讯,点击查询。这是定位与操作,是自动化重点,后文详细讲解
page.locator('#kw').fill('通讯') # 输入通讯
page.locator('#go').click() # 点击查询
page.wait_for_timeout(2000)
# 打印所有搜索内容
lcs = page.locator(".result-item").all()
for lc in lcs:
print(lc.inner_text())
input('3...')
# 关闭浏览器
browser.close()
# 关闭 playwright driver 进程
p.stop()下面的代码中,都是上方代价的定位元素,和操作元素的相关代码
定位元素相关代码:
# 输入通讯,点击查询。这是定位与操作,是自动化重点,后文详细讲解
page.locator('#kw').fill('通讯') # 输入通讯
page.locator('#go').click() # 点击查询
操作元素相关的代码:
# 打印所有搜索内容
lcs = page.locator(".result-item").all()
for lc in lcs:
print(lc.inner_text())page.locator('#kw') 就是定位,如果定位到元素的是输入框,就可以用.fill方法,fill输入文字方法。page.locator('#go') 就是定位,如果定位到元素的是输按钮.就可以用点击click方法,不可以用fill输入方法。因为按钮不可以输入文字。操作元素方法: 点击元素,click() 方法 元素内输入文本,fill() 方法 获取元素内部文本,inner_text() 方法
元素的选择
.就是代表类,#代表id :
id定位
Page 对象的 locator 定位到的如果是唯一(id)的 html 元素,就可以调用 Locator 对象的方法,比如 fill, click, inner_text 等等对元素进行操作了,如果不是唯一的(ID)是class的,就不能操作元素,只能用all方法,获取全部。
page.locator('#kw').fill('通讯') # 输入通讯
page.locator('#go').click() # 点击查询all,方法:all会返回很多个元素的列表,列表里面有对应其中的每一个元素的方法。
https://playwright.dev/python/docs/pages
学习网址:/cssselecotr.html
Page 对象的 locator 定位到的是class,所以后面只能用.all方法。获取全部,他的返回值是全部,会返回一个列表,列表里面,就是每一个元素的locator, 所以,lcs = page.locator(".result-item").all()后面跟上了一个for循环把列表循环出来。
class定位
# class 定位
lcs = page.locator(".result-item").all()
for lc in lcs:
print(lc.inner_text()) #这个时候就可以操作用locatorinner_text、方法了。TAG定位,直接用标签名称定位,input、button 、html、div、 p、 div、 table、也可以等一id属性和class
tag 名 选择元素的 CSS Selector 语法非常简单,直接写上 tag 名即可。
案例:
方法1、用tag
locators = page.locator('div').all()
for one in locators: #然后可以这样,打印所有的 tag 名为 div 的元素的内部可见文本
print(one.inner_text())方法2、用tag
要获取 所有的 tag 名为 div 的元素的内部可见文本,也可以直接调用 all_inner_texts、结果一样,两种不同写法。,都是获取全部文本。
texts = page.locator('div').all_inner_texts()注意,如果 locator 调用 匹配的结果是多个元素, 调用 针对单个元素的方法,比如 inner_text,会有错误抛出:
案例:这种写法是错误的,因为你用的tag定位了所有div元素,多个,但是inner_text、fill都是操作单个元素的,所以会报错。
page.locator('div').inner_text()一个学生张三可以定义有多个类型:中国人和学生。
中国人和学生都是张三的类型。
元素也可以有多个 class 类型,多个 class 类型的值之间用空格隔开,比如
<span class="chinese student">张三</span>
注意,这里 span 元素 有两个 class 属性,分别是 chinese 和 student,而不是一个 名为 chinese student 的属性。
我们要用代码选择这个元素,可以指定任意一个 class 属性值,都可以匹配到这个元素,如下
page.locator('.chinese')page.locator('.student')而不能这样定位、中间如果出现空格,代表后面是前面内部的元素,有可能是子元素、孙元素等等。
page.locator('.chinese student')如果你想选择一个元素,这个元素既有chinese属性,又有student属性。
如果你想定位两个元素,要这样写、中间就不能有空格、用点就可以
page.locator('.chineses.tudent')