CSS选择器定位元素

时间:2025-10-08 10:48:26  阅读量:  分类:标签:

学习网址:/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')