ElementHandle
- 继承自: JSHandle
ElementHandle 表示页面内的 DOM 元素。ElementHandle 可以通过 page.query_selector(selector, **kwargs) 方法创建。
不推荐使用 ElementHandle,请改用 Locator 对象和 web-first 断言。
- Sync
- Async
href_element = page.query_selector("a")
href_element.click()
href_element = await page.query_selector("a")
await href_element.click()
ElementHandle 会阻止 DOM 元素被垃圾回收,除非使用 js_handle.dispose() 销毁句柄。当 ElementHandle 所在的 frame 导航时,它们会被自动销毁。
ElementHandle 实例可以作为参数传递给 page.eval_on_selector(selector, expression, **kwargs) 和 page.evaluate(expression, **kwargs) 方法。
Locator 和 ElementHandle 的区别在于,ElementHandle 指向特定的元素,而 Locator 捕获的是如何检索元素的逻辑。
在下面的例子中,handle 指向页面上的特定 DOM 元素。如果该元素的文本发生变化,或者 React 重新渲染了一个完全不同的组件,handle 仍然指向那个特定的 DOM 元素。这可能会导致意外的行为。
- Sync
- Async
handle = page.query_selector("text=Submit")
handle.hover()
handle.click()
handle = await page.query_selector("text=Submit")
await handle.hover()
await handle.click()
使用 locator 时,每次使用 element,都会使用选择器在页面中定位最新的 DOM 元素。所以在下面的片段中,底层 DOM 元素会被定位两次。
- Sync
- Async
locator = page.get_by_text("Submit")
locator.hover()
locator.click()
locator = page.get_by_text("Submit")
await locator.hover()
await locator.click()
- element_handle.bounding_box()
- element_handle.check(**kwargs)
- element_handle.click(**kwargs)
- element_handle.content_frame()
- element_handle.dblclick(**kwargs)
- element_handle.dispatch_event(type, **kwargs)
- element_handle.eval_on_selector(selector, expression, **kwargs)
- element_handle.eval_on_selector_all(selector, expression, **kwargs)
- element_handle.fill(value, **kwargs)
- element_handle.focus()
- element_handle.get_attribute(name)
- element_handle.hover(**kwargs)
- element_handle.inner_html()
- element_handle.inner_text()
- element_handle.input_value(**kwargs)
- element_handle.is_checked()
- element_handle.is_disabled()
- element_handle.is_editable()
- element_handle.is_enabled()
- element_handle.is_hidden()
- element_handle.is_visible()
- element_handle.owner_frame()
- element_handle.press(key, **kwargs)
- element_handle.query_selector(selector)
- element_handle.query_selector_all(selector)
- element_handle.screenshot(**kwargs)
- element_handle.scroll_into_view_if_needed(**kwargs)
- element_handle.select_option(**kwargs)
- element_handle.select_text(**kwargs)
- element_handle.set_checked(checked, **kwargs)
- element_handle.set_input_files(files, **kwargs)
- element_handle.tap(**kwargs)
- element_handle.text_content()
- element_handle.type(text, **kwargs)
- element_handle.uncheck(**kwargs)
- element_handle.wait_for_element_state(state, **kwargs)
- element_handle.wait_for_selector(selector, **kwargs)
- js_handle.as_element()
- js_handle.dispose()
- js_handle.evaluate(expression, **kwargs)
- js_handle.evaluate_handle(expression, **kwargs)
- js_handle.get_properties()
- js_handle.get_property(property_name)
- js_handle.json_value()
element_handle.bounding_box()
Added in: v1.8此方法返回元素的边界框,如果元素不可见则返回 null。边界框是相对于主框架视口计算的——通常与浏览器窗口相同。
滚动会影响返回的边界框,类似于 Element.getBoundingClientRect。这意味着 x 和/或 y 可能是负数。
来自子框架的元素返回相对于主框架的边界框,这与 Element.getBoundingClientRect 不同。
假设页面是静态的,使用边界框坐标执行输入是安全的。例如,下面的代码片段应该点击元素的中心。
- Sync
- Async
box = element_handle.bounding_box()
page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
box = await element_handle.bounding_box()
await page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
element_handle.check(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。Added in: v1.11#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤来选中元素:
- 确保元素是复选框或单选输入框。如果不是,此方法报错。如果元素已选中,此方法立即返回。
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 点击元素的中心。
- 等待发起的导航成功或失败,除非设置了
no_wait_after选项。 - 确保元素现在已被选中。如果不是,此方法报错。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
element_handle.click(**kwargs)
Added in: v1.8button<"left"|"right"|"middle"> 默认为left。#click_count<int> 默认为 1。参见 UIEvent.detail。#delay<float>mousedown和mouseup之间等待的时间(毫秒)。默认为 0。#force<bool> 是否跳过 actionability 检查。默认为false。#modifiers<List["Alt"|"Control"|"Meta"|"Shift"]> 要按下的修饰键。确保操作期间只按下这些修饰符,然后恢复当前的修饰符。如果未指定,则使用当前按下的修饰符。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤来点击元素:
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 点击元素的中心,或指定的
position。 - 等待发起的导航成功或失败,除非设置了
no_wait_after选项。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
element_handle.content_frame()
Added in: v1.8对于引用 iframe 节点的元素句柄,返回内容 frame,否则返回 null。
element_handle.dblclick(**kwargs)
Added in: v1.8button<"left"|"right"|"middle"> 默认为left。#delay<float>mousedown和mouseup之间等待的时间(毫秒)。默认为 0。#force<bool> 是否跳过 actionability 检查。默认为false。#modifiers<List["Alt"|"Control"|"Meta"|"Shift"]> 要按下的修饰键。确保操作期间只按下这些修饰符,然后恢复当前的修饰符。如果未指定,则使用当前按下的修饰符。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤来双击元素:
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 双击元素的中心,或指定的
position。 - 等待发起的导航成功或失败,除非设置了
no_wait_after选项。注意,如果dblclick()的第一次点击触发了导航事件,此方法将抛出错误。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
elementHandle.dblclick() 派发两个 click 事件和一个 dblclick 事件。
element_handle.dispatch_event(type, **kwargs)
Added in: v1.8type<str> DOM 事件类型:"click"、"dragstart"等。#event_init<EvaluationArgument> 可选的特定于事件的初始化属性。#- 返回值: <NoneType>#
下面的代码片段在元素上派发 click 事件。无论元素的可视状态如何,click 都会被派发。这相当于调用 element.click()。
- Sync
- Async
element_handle.dispatch_event("click")
await element_handle.dispatch_event("click")
在底层,它根据给定的 type 创建一个事件实例,使用 event_init 属性对其进行初始化,并在元素上派发它。事件默认是 composed、cancelable 且会冒泡的。
由于 event_init 是特定于事件的,请参阅事件文档以获取初始属性列表:
如果希望将活动对象传入事件,也可以指定 JSHandle 作为属性值:
- Sync
- Async
# note you can only create data_transfer in chromium and firefox
data_transfer = page.evaluate_handle("new DataTransfer()")
element_handle.dispatch_event("#source", "dragstart", {"dataTransfer": data_transfer})
# note you can only create data_transfer in chromium and firefox
data_transfer = await page.evaluate_handle("new DataTransfer()")
await element_handle.dispatch_event("#source", "dragstart", {"dataTransfer": data_transfer})
element_handle.eval_on_selector(selector, expression, **kwargs)
Added in: v1.9selector<str> 要查询的选择器。有关详细信息,请参阅使用选择器。#expression<str> 要在浏览器上下文中求值的 JavaScript 表达式。如果表达式求值为一个函数,则自动调用该函数。#arg<EvaluationArgument> 传递给expression的可选参数。#- 返回值: <Serializable>#
返回 expression 的返回值。
此方法在 ElementHandle 的子树中查找与指定选择器匹配的元素,并将其作为第一个参数传递给 expression。有关详细信息,请参阅使用选择器。如果没有元素匹配选择器,此方法报错。
如果 expression 返回 Promise,则 element_handle.eval_on_selector(selector, expression, **kwargs) 将等待 promise 解析并返回其值。
Examples:
- Sync
- Async
tweet_handle = page.query_selector(".tweet")
assert tweet_handle.eval_on_selector(".like", "node => node.innerText") == "100"
assert tweet_handle.eval_on_selector(".retweets", "node => node.innerText") = "10"
tweet_handle = await page.query_selector(".tweet")
assert await tweet_handle.eval_on_selector(".like", "node => node.innerText") == "100"
assert await tweet_handle.eval_on_selector(".retweets", "node => node.innerText") = "10"
element_handle.eval_on_selector_all(selector, expression, **kwargs)
Added in: v1.9selector<str> 要查询的选择器。有关详细信息,请参阅使用选择器。#expression<str> 要在浏览器上下文中求值的 JavaScript 表达式。如果表达式求值为一个函数,则自动调用该函数。#arg<EvaluationArgument> 传递给expression的可选参数。#- 返回值: <Serializable>#
返回 expression 的返回值。
此方法在 ElementHandle 的子树中查找与指定选择器匹配的所有元素,并将匹配元素数组作为第一个参数传递给 expression。有关详细信息,请参阅使用选择器。
如果 expression 返回 Promise,则 element_handle.eval_on_selector_all(selector, expression, **kwargs) 将等待 promise 解析并返回其值。
Examples:
<div class="feed">
<div class="tweet">Hello!</div>
<div class="tweet">Hi!</div>
</div>
- Sync
- Async
feed_handle = page.query_selector(".feed")
assert feed_handle.eval_on_selector_all(".tweet", "nodes => nodes.map(n => n.innerText)") == ["hello!", "hi!"]
feed_handle = await page.query_selector(".feed")
assert await feed_handle.eval_on_selector_all(".tweet", "nodes => nodes.map(n => n.innerText)") == ["hello!", "hi!"]
element_handle.fill(value, **kwargs)
Added in: v1.8value<str> 要为<input>、<textarea>或[contenteditable]元素设置的值。#force<bool> 是否跳过 actionability 检查。默认为false。Added in: v1.13#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
此方法等待 actionability 检查,聚焦元素,填充它,并在填充后触发 input 事件。注意,可以传递空字符串来清空输入框。
如果目标元素不是 <input>、<textarea> 或 [contenteditable] 元素,此方法报错。但是,如果元素位于具有关联 control 的 <label> 元素内,则改为填充该控件。
要发送细粒度的键盘事件,请使用 element_handle.type(text, **kwargs)。
element_handle.focus()
Added in: v1.8在元素上调用 focus。
element_handle.get_attribute(name)
Added in: v1.8返回元素属性值。
element_handle.hover(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。#modifiers<List["Alt"|"Control"|"Meta"|"Shift"]> 要按下的修饰键。确保操作期间只按下这些修饰符,然后恢复当前的修饰符。如果未指定,则使用当前按下的修饰符。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤悬停在元素上:
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 将鼠标悬停在元素的中心,或指定的
position。 - 等待发起的导航成功或失败,除非设置了
noWaitAfter选项。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
element_handle.inner_html()
Added in: v1.8返回 element.innerHTML。
element_handle.inner_text()
Added in: v1.8返回 element.innerText。
element_handle.input_value(**kwargs)
Added in: v1.13timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <str>#
返回所选 <input>、<textarea> 或 <select> 元素的 input.value。
对于非输入元素抛出错误。但是,如果元素位于具有关联 control 的 <label> 元素内,则返回控件的值。
element_handle.is_checked()
Added in: v1.8返回元素是否被选中。如果元素不是 checkbox 或 radio input,则抛出错误。
element_handle.is_disabled()
Added in: v1.8返回元素是否被禁用,与 enabled 相反。
element_handle.is_editable()
Added in: v1.8返回元素是否 editable。
element_handle.is_enabled()
Added in: v1.8返回元素是否 enabled。
element_handle.is_hidden()
Added in: v1.8返回元素是否隐藏,与 visible 相反。
element_handle.is_visible()
Added in: v1.8返回元素是否 visible。
element_handle.owner_frame()
Added in: v1.8返回包含给定元素的 frame。
element_handle.press(key, **kwargs)
Added in: v1.8key<str> 要按下的键的名称或要生成的字符,例如ArrowLeft或a。#delay<float>keydown和keyup之间等待的时间(毫秒)。默认为 0。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
聚焦元素,然后使用 keyboard.down(key) 和 keyboard.up(key)。
key 可以指定预期的 keyboardEvent.key 值或要为其生成文本的单个字符。可以在此处找到 key 值的超集。键的示例包括:
F1 - F12, Digit0- Digit9, KeyA- KeyZ, Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape, ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight, ArrowUp, etc.
如果是以下修饰键,则按住该键而不释放:
Shift、Control、Alt、Meta、ShiftLeft 等。
按住 Shift 将键入与大写 key 对应的文本。
如果 key 是单个字符,则区分大小写,因此值 a 和 A 将生成不同的相应文本。
还支持诸如 key: "Control+o" 或 key: "Control+Shift+T" 之类的快捷键。当指定修饰符时,按下修饰符并在按下后续键时保持按住。
简单地按一个键:
- Sync
- Async
element_handle.press("Enter")
await element_handle.press("Enter")
但是,可以使用 Control+O 快捷键打开文件:
- Sync
- Async
element_handle.press("Control+O")
await element_handle.press("Control+O")
- Sync
- Async
element_handle.press("Shift+Select all")
await element_handle.press("Shift+Select all")
快捷键(如 KeyA)映射到代码(如 KeyA)。
对于像 Control+A 这样的文本操作快捷键,请使用 page.keyboard.press(key, **kwargs)。
element_handle.query_selector(selector)
Added in: v1.9此方法在 ElementHandle 的子树中查找与指定选择器匹配的元素。有关详细信息,请参阅使用选择器。如果没有元素匹配选择器,返回 null。
element_handle.query_selector_all(selector)
Added in: v1.9此方法在 ElementHandle 的子树中查找与指定选择器匹配的所有元素。有关详细信息,请参阅使用选择器。如果没有元素匹配选择器,返回空列表。
element_handle.screenshot(**kwargs)
Added in: v1.8animations<"disabled"|"allow"> 停止 CSS 动画时,CSS 属性将更新为初始值。默认为allow。#caret<"hide"|"initial"> 截图时,是否隐藏文本插入符号。默认为hide。#clip<Dict> 指定页面剪裁区域的对象。包含x、y、width和height。#mask<List[Locator]> 指定截图时需要遮罩的定位器。遮罩元素会被覆盖在粉红色的#FF00FF框上,以此掩盖截图上的变化。Added in: v1.11#omit_background<bool> 隐藏默认的白色背景,并允许捕获透明背景的截图。这不适用于jpeg图像。默认为false。#path<Union[str, pathlib.Path]> 保存图像的文件路径。截图类型将从文件扩展名推断出。如果path是相对路径,则相对于当前工作目录解析。#quality<int> 图像质量,介于 0-100 之间。不适用于png图像。#scale<"css"|"device"> 默认为css,此时截图将具有单个像素对应的每个 css 像素。如果设置为device,截图将具有单个像素对应的每个设备像素,因此高 dpi 设备的截图将是原来的两倍大(取决于 devicePixelRatio)。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#type<"png"|"jpeg"> 指定截图类型,可以是png或jpeg。默认为png。#- 返回值: <bytes>#
此方法捕获页面的屏幕截图,剪切到元素的大小和位置。如果元素从 DOM 中分离,此方法抛出错误。
返回捕获的屏幕截图的缓冲区。如果元素是可滚动容器,则只有当前滚动的内容在屏幕截图中可见。
此方法等待 actionability 检查,然后在截取屏幕截图之前将元素滚动到视图中。如果元素从 DOM 中分离,此方法将抛出错误。
返回包含捕获的屏幕截图的缓冲区。
element_handle.scroll_into_view_if_needed(**kwargs)
Added in: v1.8timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
此方法等待 actionability 检查,然后尝试滚动元素以使其显现在视口中,除非它完全可见。
如果 element_handle 没有指向 连接 到 Document 或 ShadowRoot 的元素,则抛出错误。
element_handle.select_option(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。Added in: v1.13#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#element<ElementHandle|List[ElementHandle]> 要选择的选项。如果<select>具有multiple属性,则选择所有给定的选项,否则只选择第一个选项。匹配的选项必须完全等同于id。#index<int|List[int]> 要选择的选项索引。如果<select>具有multiple属性,则选择所有给定的选项,否则只选择第一个选项。#value<str|List[str]> 要选择的选项值。如果<select>具有multiple属性,则选择所有给定的选项,否则只选择第一个选项。#label<str|List[str]> 要选择的选项标签。如果<select>具有multiple属性,则选择所有给定的选项,否则只选择第一个选项。#- 返回值: <List[str]>#
返回所选选项输入值的列表。
此方法等待 actionability 检查,等待所有指定的选项出现在 <select> 中,并选择这些选项。
如果目标元素不是 <select> 元素,此方法抛出错误。但是,如果元素位于具有关联 control 的 <label> 元素内,则改为在控件上使用此方法。
返回已成功选择的选项值的数组。
一旦选择了所有提供的选项,将触发 change 和 input 事件。
- Sync
- Async
# single selection matching the value
handle.select_option("blue")
# single selection matching both the label
handle.select_option(label="blue")
# multiple selection
handle.select_option(value=["red", "green", "blue"])
# single selection matching the value
await handle.select_option("blue")
# single selection matching the label
await handle.select_option(label="blue")
# multiple selection
await handle.select_option(value=["red", "green", "blue"])
element_handle.select_text(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
此方法等待 actionability 检查,然后聚焦元素并选择其所有文本内容。
如果元素位于具有关联 control 的 <label> 元素内,则聚焦并选中控件中的文本。
element_handle.set_checked(checked, **kwargs)
Added in: v1.15checked<bool> 是否选中元素。默认为true。#force<bool> 是否跳过 actionability 检查。默认为false。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法选中或取消选中元素。如果元素已处于所需状态,则此方法立即返回。
通过执行以下步骤来选中或取消选中元素:
- 确保元素是复选框或单选输入框。如果不是,此方法报错。
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 点击元素的中心。
- 等待发起的导航成功或失败,除非设置了
no_wait_after选项。 - 确保元素现在已被选中或取消选中。如果不是,此方法报错。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
element_handle.set_input_files(files, **kwargs)
Added in: v1.8files<Union[str, pathlib.Path, Dict, List[Union[str, pathlib.Path, Dict]]]>#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
将文件输入的值设置为这些文件路径或文件。如果某些 filePaths 是相对路径,则它们相对于当前工作目录解析。对于空数组,清除选定的文件。
此方法期望 ElementHandle 指向 input element。但是,如果元素位于具有关联 control 的 <label> 元素内,则指向该控件。
element_handle.tap(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。#modifiers<List["Alt"|"Control"|"Meta"|"Shift"]> 要按下的修饰键。确保在操作期间仅按下这些修饰键,然后恢复当前修饰键。如果未指定,则使用当前按下的修饰键。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤来点击(taps)元素:
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.touchscreen 点击(tap)元素的中心或指定的
position。 - 等待发起的导航成功或失败,除非设置了
no_wait_after选项。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
elementHandle.tap() 要求将浏览器上下文的 hasTouch 选项设置为 true。
element_handle.text_content()
Added in: v1.8返回 node.textContent。
element_handle.type(text, **kwargs)
Added in: v1.8text<str> 要输入到聚焦元素的文本。#delay<float> 按键之间的等待时间(毫秒)。默认为 0。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
聚焦元素,然后为文本中的每个字符发送 keydown、keypress/input 和 keyup 事件。
要按特殊键,如 Control 或 ArrowDown,请使用 element_handle.press(key, **kwargs)。
- Sync
- Async
element_handle.type("hello") # types instantly
element_handle.type("world", delay=100) # types slower, like a user
await element_handle.type("hello") # types instantly
await element_handle.type("world", delay=100) # types slower, like a user
在一个文本框中输入并提交表单的示例:
- Sync
- Async
element_handle = page.query_selector("input")
element_handle.type("some text")
element_handle.press("Enter")
element_handle = await page.query_selector("input")
await element_handle.type("some text")
await element_handle.press("Enter")
element_handle.uncheck(**kwargs)
Added in: v1.8force<bool> 是否跳过 actionability 检查。默认为false。#no_wait_after<bool> 启动导航的操作会等待导航完成并等待页面开始加载。你可以通过设置此标志来选择不等待。你仅在特殊情况下(如导航到不可访问的页面)才需要此选项。默认为false。#position<Dict> 相对于元素填充框左上角的点。如果未指定,则使用元素的某个可见点。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#trial<bool> 设置后,此方法仅执行 actionability 检查并跳过操作。默认为false。常用于在不执行操作的情况下等待元素准备就绪。Added in: v1.11#- 返回值: <NoneType>#
此方法通过执行以下步骤来取消选中元素:
- 确保元素是复选框或单选输入框。如果不是,此方法报错。如果元素已经取消选中,此方法立即返回。
- 等待元素上的 actionability 检查,除非设置了
force选项。 - 如果需要,将元素滚动到视图中。
- 使用 page.mouse 点击(tap)元素的中心。
- 等待发起的导航成功或失败,除非设置了
no_wait_after选项。 - 确保元素现在已取消选中。如果不是,此方法报错。
如果元素在操作期间的任何时刻从 DOM 中分离,此方法报错。
如果所有步骤结合起来在指定的 timeout 内未完成,此方法抛出 TimeoutError。传递零超时以禁用此功能。
element_handle.wait_for_element_state(state, **kwargs)
Added in: v1.8state<"visible"|"hidden"|"stable"|"enabled"|"disabled"|"editable"> 要等待的 state,有关详细信息,请参见下文。#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType>#
当元素满足 state 时返回。
根据 state 参数,此方法等待 actionability 检查之一通过。除非等待 "hidden" 状态,否则如果在等待时元素分离,此方法将报错。
"visible"等待直到元素 visible。"hidden"等待直到元素 not visible 或 not attached。请注意,等待 hidden 状态时,如果元素分离不会报错。"stable"等待直到元素 visible 且 stable。"enabled"等待直到元素 enabled。"disabled"等待直到元素 not enabled。"editable"等待直到元素 editable。
如果元素在 timeout 毫秒内不满足条件,此方法将抛出错误。
element_handle.wait_for_selector(selector, **kwargs)
Added in: v1.8selector<str> 要查询的选择器。有关详细信息,请参阅使用选择器。#state<"attached"|"detached"|"visible"|"hidden"> 默认为'visible'。可以是以下之一:#'attached'- 等待元素出现在 DOM 中。'detached'- 等待元素从 DOM 中消失。'visible'- 等待元素具有非空边界框且没有visibility:hidden。请注意,没有任何内容或具有display:none的元素具有空边界框,并且不被视为可见。'hidden'- 等待元素从 DOM 中分离,或具有空边界框或visibility:hidden。这与'visible'选项相反。
strict<bool> 如果为 true,则调用要求选择器解析为单个元素。如果给定的选择器解析为多个元素,则调用抛出异常。Added in: v1.15#timeout<float> 最长等待时间(毫秒),默认为 30 秒,传递0以禁用超时。可以使用 browser_context.set_default_timeout(timeout) 或 page.set_default_timeout(timeout) 方法修改默认值。#- 返回值: <NoneType|ElementHandle>#
返回由选择器指定的元素,当该元素满足 state 选项时。如果在等待 hidden 或 detached,则返回 null。
等待相对于元素句柄的 selector 满足 state 选项(出现在/消失于 DOM,或 变得可见/隐藏)。如果在调用方法时 selector 已经满足条件,该方法将立即返回。如果选择器在 timeout 毫秒内不满足条件,函数将抛出错误。
- Sync
- Async
page.set_content("<div><span></span></div>")
div = page.query_selector("div")
# waiting for the "span" selector relative to the div.
span = div.wait_for_selector("span", state="attached")
await page.set_content("<div><span></span></div>")
div = await page.query_selector("div")
# waiting for the "span" selector relative to the div.
span = await div.wait_for_selector("span", state="attached")
此方法不适用于跨导航操作,请改用 page.wait_for_selector(selector, **kwargs)。