drissionpage 技巧

属性定位 page.ele('@name=username') 通过属性名和属性值定位
page.ele('@placeholder') 查找具有该属性的元素
文本定位 page.ele('文本内容') 查找包含指定文本的元素
page.ele('text:精确文本') 查找文本等于指定内容的元素
多重定位 page.ele('tag:div@class=name:text') 组合多种方式精确定位
chrome_path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'  # 你的浏览器路径
ChromiumOptions().set_browser_path(chrome_path).save()
输入文本 .input() element.input('文本') 在输入框内输入文本
获取属性 .attr() href = element.attr('href') 获取元素特定属性的值
执行JS .run_js() page.run_js('alert("Hello");') 在页面中执行JavaScript代码

page.run_js('document.querySelector("video").play();')

切换标签页 .to_tab() page.to_tab(1)

. 模式切换(WebPage 的强大功能)

混合模式 (WebPage) 允许你在浏览器模式和数据包模式之间无缝切换,并共享 Cookie 和 Session 状态。

page = WebPage()  # 默认可能是浏览器模式,具体看初始化设置

# 1. 先用浏览器模式登录网站
page.get('https://example.com/login')
page.ele('#username').input('my_username')
page.ele('#password').input('my_password')
page.ele('@type=submit').click()

# 2. 登录成功后,切换到数据包模式(Session模式)进行高效采集
page.change_mode()  

# 3. 现在可以使用数据包模式访问需要登录后才能看的页面,Cookie自动携带
page.get('https://example.com/dashboard/data')
items = page.eles('.data-item')
for item in items:
    print(item.text)

文本匹配模式语法一览

匹配模式 符号 说明 示例(查找元素) 示例含义
模糊匹配 : 匹配包含指定字符串的文本或属性 page.ele('@text():第二') 查找文本包含“第二”的元素
精确匹配 = 匹配完全等于指定字符串的文本或属性 page.ele('@text()=第二行') 查找文本完全等于“第二行”的元素
匹配开头 ^ 匹配开头为指定字符串的文本或属性 page.ele('@text()^第二') 查找文本以“第二”开头的元素
匹配结尾 $ 匹配结尾为指定字符串的文本或属性 page.ele('@text()$行') 查找文本以“行”结尾的元素
否定匹配 @! 匹配不包含或不等于指定字符串的文本或属性 page.ele('@!class=hidden') 查找 class 属性不等于"hidden"的元素

常用属性的简便写法

为了更简洁,DrissionPage 为一些常用属性提供了简便的写法:

属性 简便写法 等价于 示例(查找元素) 示例含义
id # @id page.ele('#:ne') 查找 id 属性包含"ne"的元素
class . @class page.ele('.:_cls') 查找 class 属性包含"_cls"的元素
文本 text: 或直接写 @text() page.ele('text:第二') 查找文本包含“第二”的元素(

查找上级元素(父元素、祖先元素)

可以使用 parent() 方法查找当前元素的父元素祖先元素

python

# 假设 current_ele 是某个已经定位到的元素
current_ele = page.ele('text=具体的某行文本')

# 查找直接父元素
parent_ele = current_ele.parent()

# 查找上溯第2级的祖先元素(父元素的父元素)
grand_parent_ele = current_ele.parent(2)

# 使用定位语法在祖先元素中查找符合条件的元素(DrissionPage 特有强大功能)
# 查找上方最近的一个 class 为 'menu' 的祖先元素
ancestor_ele = current_ele.parent('@class=menu') 

查找兄弟元素

可以使用 next()prev() 方法查找当前元素的下一个上一个兄弟元素。

python

# 假设 current_ele 是某个已经定位到的元素

# 查找下一个兄弟元素
next_ele = current_ele.next()

# 查找上一个兄弟元素
prev_ele = current_ele.prev()

# 使用定位语法查找符合条件的下一个兄弟元素
# 查找下一个兄弟元素中 class 为 'active' 的
next_active_ele = current_ele.next('@class=active')  # 或者 current_ele.next('.active')

# 查找所有后面的兄弟元素
all_next_eles = current_ele.nexts()

# 查找所有前面的兄弟元素
all_prev_eles = current_ele.prevs()

# 查找所有后面的兄弟元素中标签为 li 的
all_next_lis = current_ele.nexts('tag:li')
技巧类别 核心技巧/方法 作用描述 适用模式
智能等待与控制 wait.ele_loaded(), wait.doc_loaded() 等待元素或文档加载完成,避免操作时元素尚未出现 ChromiumPage, WebPage
scroll.to_bottom() 滚动页面到底部,触发动态加载内容 ChromiumPage, WebPage
浏览器配置与伪装 ChromiumOptions().set_headless(True) 设置无头模式(不显示浏览器界面) ChromiumPage
set_user_agent(), set_proxy() 设置用户代理和代理服务器,增强隐蔽性 ChromiumPage, SessionPage
set_argument('--disable-blink-features=AutomationControlled')

posted on 2025-09-09 10:13  土豆爸  阅读(100)  评论(0)    收藏  举报

导航