1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//! 键名常量 [`Keys`] 与按键序列输入 [`KeyInput`](对标 DrissionPage 的 `Keys` 与 `ele.input` 序列)。
//!
//! **后端无关**:Camoufox(Juggler)与 Chromium(CDP)两后端共用,故住在 crate 顶层、始终编译。
//!
//! - [`Keys`][]:常用特殊键名常量,值即 DOM 的 `key` 名;普通字符直接用字符串即可。
//! 用于 `Tab::press_key` / [`KeyInput::key`]。
//! - [`KeyInput`][]:把"文本 + 特殊键"混排成一个序列,交给 `Element::input_keys`
//! (对应 DP `ele.input(['abc', Keys.ENTER])`)。
//!
//! ```ignore
//! use drission::prelude::*;
//! tab.press_key(Keys::ENTER).await?;
//! ele.input_keys(&[KeyInput::text("hello"), KeyInput::key(Keys::ENTER)]).await?;
//! ```
//!
//! **修饰组合键 / 热键**:
//! - **CDP / Chromium 后端**:**已支持**。`tab.key_combo(&[Keys::CONTROL, "a"])` /
//! `ele.shortcut(&[Keys::META, "a"])`——CDP 原生 `modifiers` 位掩码下发(页面读得到 `e.ctrlKey`/
//! `metaKey` 等为 `true`),并对常见编辑快捷键(Ctrl/Cmd + A/C/X/V/Z/Y)带上 CDP `commands` 让
//! 浏览器**真正执行**编辑动作(selectAll/copy…),无头下也生效。
//! - **平台限制(Camoufox 后端)**:Camoufox 当前的 Juggler `dispatchKeyEvent` **没有 `modifiers` 字段**,
//! 也不会跨调用跟踪"修饰键按下态"(合成的主键事件 `e.ctrlKey` 仍为 false)→ **修饰组合键的原生
//! 效果无法合成**(非库缺陷)。需要"全选"等可用 JS:如 `ele.run_js("node.select()")`(输入框)
//! 或 `tab.run_js("document.execCommand('selectAll')")`。
/// 常用特殊键名常量(值即 DOM 的 `key` 名)。
;
/// 按键序列的一项:文本 或 特殊键(对应 DP `ele.input(['abc', Keys.ENTER])`)。