跳到主要內容

Frame

在任何時間點,頁面都會透過 page.main_frameframe.child_frames 方法公開其目前的 frame 樹狀結構。

Frame 物件的生命週期由三個事件控制,這些事件在 page 物件上分派

Frame 樹狀結構的範例傾印

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
firefox = playwright.firefox
browser = firefox.launch()
page = browser.new_page()
page.goto("https://www.theverge.com")
dump_frame_tree(page.main_frame, "")
browser.close()

def dump_frame_tree(frame, indent):
print(indent + frame.name + '@' + frame.url)
for child in frame.child_frames:
dump_frame_tree(child, indent + " ")

with sync_playwright() as playwright:
run(playwright)

方法

add_script_tag

在 v1.9 之前新增 frame.add_script_tag

當 script 的 onload 事件觸發或當 script 內容注入到 frame 時,傳回新增的標籤。

<script> 標籤與所需的 url 或內容新增到頁面中。

用法

frame.add_script_tag()
frame.add_script_tag(**kwargs)

引數

  • content str (選用)#

    要注入到 frame 中的原始 JavaScript 內容。

  • path Union[str, pathlib.Path] (選用)#

    要注入到 frame 中的 JavaScript 檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。

  • type str (選用)#

    Script 類型。使用 'module' 以載入 JavaScript ES6 模組。請參閱 script 以取得更多詳細資訊。

  • url str (選用)#

    要新增的 script URL。

傳回


add_style_tag

在 v1.9 之前新增 frame.add_style_tag

當樣式表的 onload 事件觸發或當 CSS 內容注入到 frame 時,傳回新增的標籤。

<link rel="stylesheet"> 標籤與所需的 url 或 <style type="text/css"> 標籤與內容新增到頁面中。

用法

frame.add_style_tag()
frame.add_style_tag(**kwargs)

引數

  • content str (選用)#

    要注入到 frame 中的原始 CSS 內容。

  • path Union[str, pathlib.Path] (選用)#

    要注入到 frame 中的 CSS 檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。

  • url str (選用)#

    <link> 標籤的 URL。

傳回


content

在 v1.9 之前新增 frame.content

取得 frame 的完整 HTML 內容,包括 doctype。

用法

frame.content()

傳回


drag_and_drop

新增於:v1.13 frame.drag_and_drop

用法

frame.drag_and_drop(source, target)
frame.drag_and_drop(source, target, **kwargs)

引數

  • source str#

    要搜尋要拖曳之元素的選取器。如果有多個元素符合選取器,則會使用第一個。

  • target str#

    要搜尋要放置到其上的元素的選取器。如果有多個元素符合選取器,則會使用第一個。

  • force bool (選用)#

    是否要略過可操作性檢查。預設為 false

  • no_wait_after bool (選用)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • source_position Dict (選用)新增於:v1.14#

    在此點擊來源元素,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某個可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • target_position Dict (選用)新增於:v1.14#

    在此點放置到目標元素上,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某個可見點。

  • timeout float (選用)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選用)#

    設定時,此方法只會執行可操作性檢查,並略過動作。預設為 false。在不執行動作的情況下,等待元素準備好執行動作時很有用。

傳回


evaluate

在 v1.9 之前新增 frame.evaluate

傳回 expression 的傳回值。

如果傳遞至 frame.evaluate() 的函式傳回 Promise,則 frame.evaluate() 會等待 Promise 解析並傳回其值。

如果傳遞至 frame.evaluate() 的函式傳回非 Serializable 值,則 frame.evaluate() 會傳回 undefined。Playwright 也支援傳輸一些 JSON 無法序列化的其他值:-0NaNInfinity-Infinity

用法

result = frame.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
print(result) # prints "56"

也可以傳入字串來代替函式。

print(frame.evaluate("1 + 2")) # prints "3"
x = 10
print(frame.evaluate(f"1 + {x}")) # prints "11"

ElementHandle 執行個體可以作為引數傳遞至 frame.evaluate()

body_handle = frame.evaluate("document.body")
html = frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
body_handle.dispose()

引數

  • expression str#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    要傳遞至 expression 的選用引數。

傳回


evaluate_handle

在 v1.9 之前新增 frame.evaluate_handle

JSHandle 傳回 expression 的傳回值。

frame.evaluate()frame.evaluate_handle() 之間的唯一差異在於 frame.evaluate_handle() 傳回 JSHandle

如果傳遞至 frame.evaluate_handle() 的函式傳回 Promise,則 frame.evaluate_handle() 會等待 Promise 解析並傳回其值。

用法

a_window_handle = frame.evaluate_handle("Promise.resolve(window)")
a_window_handle # handle for the window object.

也可以傳入字串來代替函式。

a_handle = page.evaluate_handle("document") # handle for the "document"

JSHandle 執行個體可以作為引數傳遞至 frame.evaluate_handle()

a_handle = page.evaluate_handle("document.body")
result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
print(result_handle.json_value())
result_handle.dispose()

引數

  • expression str#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選用)#

    要傳遞至 expression 的選用引數。

傳回


frame_element

在 v1.9 之前新增 frame.frame_element

傳回對應於此 frame 的 frameiframe 元素控制代碼。

這是 element_handle.content_frame() 的反向操作。請注意,傳回的控制代碼實際上屬於父 frame。

如果 frame 在 frameElement() 傳回之前已分離,則此方法會擲回錯誤。

用法

frame_element = frame.frame_element()
content_frame = frame_element.content_frame()
assert frame == content_frame

傳回


frame_locator

新增於:v1.17 frame.frame_locator

使用 iframe 時,您可以建立 frame 定位器,以進入 iframe 並允許在該 iframe 中選取元素。

用法

以下程式碼片段會在 id 為 my-frame 的 iframe 中尋找文字為 "Submit" 的元素,例如 <iframe id="my-frame">

locator = frame.frame_locator("#my-iframe").get_by_text("Submit")
locator.click()

引數

  • selector str#

    解析 DOM 元素時要使用的選取器。

傳回


get_by_alt_text

新增於:v1.27 frame.get_by_alt_text

允許依據元素的替代文字定位元素。

用法

例如,此方法會依據替代文字 "Playwright logo" 尋找影像

<img alt='Playwright logo'>
page.get_by_alt_text("Playwright logo").click()

引數

  • text str | Pattern#

    要定位元素的文字。

  • exact bool (選用)#

    是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。

傳回


get_by_label

新增於:v1.27 frame.get_by_label

允許依據相關聯 <label>aria-labelledby 元素的文字,或依據 aria-label 屬性定位輸入元素。

用法

例如,此方法會在以下 DOM 中依據標籤 "Username" 和 "Password" 尋找輸入

<input aria-label="Username">
<label for="password-input">Password:</label>
<input id="password-input">
page.get_by_label("Username").fill("john")
page.get_by_label("Password").fill("secret")

引數

  • text str | Pattern#

    要定位元素的文字。

  • exact bool (選用)#

    是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。

傳回


get_by_placeholder

新增於:v1.27 frame.get_by_placeholder

允許依據預留位置文字定位輸入元素。

用法

例如,考量以下 DOM 結構。

<input type="email" placeholder="name@example.com" />

您可以在依據預留位置文字定位輸入後填寫輸入

page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")

引數

  • text str | Pattern#

    要定位元素的文字。

  • exact bool (選用)#

    是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。

傳回


get_by_role

新增於:v1.27 frame.get_by_role

允許依據元素的ARIA 角色ARIA 屬性可存取名稱定位元素。

用法

考量以下 DOM 結構。

<h3>Sign up</h3>
<label>
<input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>

您可以依據每個元素的隱含角色定位元素

expect(page.get_by_role("heading", name="Sign up")).to_be_visible()

page.get_by_role("checkbox", name="Subscribe").check()

page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click()

引數

  • role "alert" | "alertdialog" | "application" | "article" | "banner" | "blockquote" | "button" | "caption" | "cell" | "checkbox" | "code" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "deletion" | "dialog" | "directory" | "document" | "emphasis" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "insertion" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "meter" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "paragraph" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "strong" | "subscript" | "superscript" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "time" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem"#

    必要的 aria 角色。

  • checked bool (選用)#

    通常由 aria-checked 或原生 <input type=checkbox> 控制項設定的屬性。

    深入瞭解 aria-checked

  • disabled bool (選用)#

    通常由 aria-disableddisabled 設定的屬性。

    注意

    與大多數其他屬性不同,disabled 會透過 DOM 階層繼承。深入瞭解 aria-disabled

  • exact bool (選用)新增於:v1.28#

    是否完全比對 name:區分大小寫且為完整字串。預設為 false。name 是規則運算式時會忽略。請注意,完全符合的項目仍會修剪空白字元。

  • expanded bool (選用)#

    通常由 aria-expanded 設定的屬性。

    深入瞭解 aria-expanded

  • include_hidden bool (選用)#

    控制是否比對隱藏元素的選項。根據預設,只有非隱藏元素 (如 ARIA 定義) 會由角色選取器比對。

    深入瞭解 aria-hidden

  • level int (選用)#

    數字屬性,通常用於角色 headinglistitemrowtreeitem<h1>-<h6> 元素的預設值。

    深入瞭解 aria-level

  • name str | Pattern (選用)#

    比對可存取名稱的選項。根據預設,比對不區分大小寫,並搜尋子字串,使用 exact 控制此行為。

    深入瞭解可存取名稱

  • pressed bool (選用)#

    通常由 aria-pressed 設定的屬性。

    深入瞭解 aria-pressed

  • selected bool (選用)#

    通常由 aria-selected 設定的屬性。

    深入瞭解 aria-selected

傳回

詳細資訊

角色選取器無法取代可存取性稽核和一致性測試,而是提供關於 ARIA 指導方針的早期意見反應。

許多 html 元素都有隱含的 定義角色,角色選取器會辨識該角色。您可以在此處找到所有支援的角色。ARIA 指導方針不建議透過將 role 和/或 aria-* 屬性設定為預設值來重複隱含角色和屬性。


get_by_test_id

新增於:v1.27 frame.get_by_test_id

依據測試 ID 定位元素。

用法

考量以下 DOM 結構。

<button data-testid="directions">Itinéraire</button>

您可以依據元素的測試 ID 定位元素

page.get_by_test_id("directions").click()

引數

  • test_id str | Pattern#

    依據其定位元素的 ID。

傳回

詳細資訊

根據預設,data-testid 屬性會用作測試 ID。如有必要,請使用 selectors.set_test_id_attribute() 設定不同的測試 ID 屬性。


get_by_text

新增於:v1.27 frame.get_by_text

允許尋找包含指定文字的元素。

另請參閱 locator.filter(),其允許依據其他條件(例如可存取角色)進行比對,然後再依文字內容篩選。

用法

考慮以下 DOM 結構

<div>Hello <span>world</span></div>
<div>Hello</div>

您可以使用文字子字串、完全相符的字串或正規表示式來尋找。

# Matches <span>
page.get_by_text("world")

# Matches first <div>
page.get_by_text("Hello world")

# Matches second <div>
page.get_by_text("Hello", exact=True)

# Matches both <div>s
page.get_by_text(re.compile("Hello"))

# Matches second <div>
page.get_by_text(re.compile("^hello$", re.IGNORECASE))

引數

  • text str | Pattern#

    要定位元素的文字。

  • exact bool (選填)#

    是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。

傳回

詳細資訊

即使使用完全比對,依文字比對時永遠會正規化空白字元。例如,它會將多個空格轉換為一個空格,將換行符號轉換為空格,並忽略開頭和結尾的空白字元。

類型為 buttonsubmit 的輸入元素會依其 value 而非文字內容進行比對。例如,依文字 "Log in" 尋找會比對到 <input type=button value="Log in">


get_by_title

新增於:v1.27 frame.get_by_title

允許依據元素的 title 屬性尋找元素。

用法

考量以下 DOM 結構。

<span title='Issues count'>25 issues</span>

您可以在依 title 文字尋找到元素後,檢查問題計數

expect(page.get_by_title("Issues count")).to_have_text("25 issues")

引數

  • text str | Pattern#

    要定位元素的文字。

  • exact bool (選填)#

    是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。

傳回


goto

在 v1.9 之前新增 frame.goto

傳回主要資源回應。在多次重新導向的情況下,導覽將會以最後一次重新導向的回應進行解析。

在以下情況下,此方法將會拋出錯誤

  • 發生 SSL 錯誤(例如,在自我簽署憑證的情況下)。
  • 目標 URL 無效。
  • 導覽期間超出 timeout(逾時)。
  • 遠端伺服器沒有回應或無法連線。
  • 主要資源載入失敗。

當遠端伺服器傳回任何有效的 HTTP 狀態碼時,此方法不會拋出錯誤,包括 404 "Not Found" 和 500 "Internal Server Error"。此類回應的狀態碼可以透過呼叫 response.status 取得。

注意

此方法會拋出錯誤或傳回主要資源回應。唯一的例外是導覽至 about:blank 或導覽至具有不同雜湊值的相同 URL,這將會成功並傳回 null

注意

無頭模式不支援導覽至 PDF 文件。請參閱 上游問題

用法

frame.goto(url)
frame.goto(url, **kwargs)

引數

  • url str#

    要將 frame 導覽至的 URL。URL 應包含 scheme,例如 https://

  • referer str (選填)#

    Referer 標頭值。如果提供,則其優先順序高於由 page.set_extra_http_headers() 設定的 referer 標頭值。

  • timeout float (選填)#

    最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout() 方法變更。

  • wait_until "load" | "domcontentloaded" | "networkidle" | "commit" (選填)#

    何時視為操作成功,預設為 load。事件可以是

    • 'domcontentloaded' - 當 DOMContentLoaded 事件觸發時,視為操作完成。
    • 'load' - 當 load 事件觸發時,視為操作完成。
    • 'networkidle' - **不建議** 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
    • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


is_enabled

在 v1.9 之前新增 frame.is_enabled

傳回元素是否為 enabled(啟用)。

用法

frame.is_enabled(selector)
frame.is_enabled(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


locator

新增於:v1.14 frame.locator

此方法傳回元素定位器,可用於在此頁面/frame 上執行動作。定位器會在執行動作之前立即解析為元素,因此對相同定位器執行的一系列動作實際上可能會在不同的 DOM 元素上執行。如果這些動作之間的 DOM 結構已變更,就會發生這種情況。

深入瞭解定位器.

深入瞭解定位器.

用法

frame.locator(selector)
frame.locator(selector, **kwargs)

引數

  • selector str#

    解析 DOM 元素時要使用的選取器。

  • has Locator (選填)#

    將此方法的結果縮小為包含與此相對定位器相符之元素的結果。例如,具有 text=Playwrightarticle 會比對到 <article><div>Playwright</div></article>

    內部定位器**必須相對於**外部定位器,並且從外部定位器比對開始查詢,而不是從文件根目錄開始。例如,您可以在 <article><content><div>Playwright</div></content></article> 中找到具有 divcontent。但是,尋找具有 article divcontent 將會失敗,因為內部定位器必須是相對的,且不應使用 content 外部的任何元素。

    請注意,外部和內部定位器必須屬於相同的 frame。內部定位器不得包含 FrameLocator

  • has_not Locator (選填)新增於:v1.33#

    比對不包含與內部定位器相符之元素的元素。內部定位器會針對外部定位器進行查詢。例如,不具有 divarticle 會比對到 <article><span>Playwright</span></article>

    請注意,外部和內部定位器必須屬於相同的 frame。內部定位器不得包含 FrameLocator

  • has_not_text str | Pattern (選填)新增於:v1.33#

    比對在內部某處(可能在子元素或後代元素中)不包含指定文字的元素。當傳遞 [字串] 時,比對會區分大小寫並搜尋子字串。

  • has_text str | Pattern (選填)#

    比對在內部某處(可能在子元素或後代元素中)包含指定文字的元素。當傳遞 [字串] 時,比對會區分大小寫並搜尋子字串。例如,"Playwright" 會比對到 <article><div>Playwright</div></article>

傳回


set_content

在 v1.9 之前新增 frame.set_content

此方法在內部呼叫 document.write(),並繼承其所有特定特性和行為。

用法

frame.set_content(html)
frame.set_content(html, **kwargs)

引數

  • html str#

    要指派給頁面的 HTML 標記。

  • timeout float (選填)#

    最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout() 方法變更。

  • wait_until "load" | "domcontentloaded" | "networkidle" | "commit" (選填)#

    何時視為操作成功,預設為 load。事件可以是

    • 'domcontentloaded' - 當 DOMContentLoaded 事件觸發時,視為操作完成。
    • 'load' - 當 load 事件觸發時,視為操作完成。
    • 'networkidle' - **不建議** 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
    • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


title

在 v1.9 之前新增 frame.title

傳回頁面標題。

用法

frame.title()

傳回


wait_for_function

在 v1.9 之前新增 frame.wait_for_function

expression(表達式)傳回 truthy 值時傳回,並傳回該值。

用法

frame.wait_for_function() 可用於觀察視口大小變更

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
page.main_frame.wait_for_function("() => window.x > 0")
browser.close()

with sync_playwright() as playwright:
run(playwright)

若要將引數傳遞至 frame.waitForFunction 函式的述詞

selector = ".foo"
frame.wait_for_function("selector => !!document.querySelector(selector)", selector)

引數

  • expression str#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選填)#

    要傳遞至 expression(表達式)的選用引數。

  • polling float | "raf" (選填)#

    如果 polling'raf',則 expression(表達式)會在 requestAnimationFrame 回呼中持續執行。如果 polling 是數字,則會將其視為函式執行的間隔(毫秒)。預設為 raf

  • timeout float (選填)#

    最長等待時間(毫秒)。預設值為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


wait_for_load_state

在 v1.9 之前新增 frame.wait_for_load_state

等待達到要求的載入狀態。

當 frame 達到要求的載入狀態時,此方法會傳回,預設為 load。當呼叫此方法時,導覽必須已提交。如果目前文件已達到要求的狀態,則會立即解析。

注意

大多數情況下,不需要此方法,因為 Playwright 會在每個動作前自動等待

用法

frame.click("button") # click triggers navigation.
frame.wait_for_load_state() # the promise resolves after "load" event.

引數

  • state "load" | "domcontentloaded" | "networkidle" (選填)#

    要等待的選用載入狀態,預設為 load。如果在載入目前文件時已達到該狀態,則此方法會立即解析。可以是下列其中之一

    • 'load' - 等待 load 事件觸發。
    • 'domcontentloaded' - 等待 DOMContentLoaded 事件觸發。
    • 'networkidle' - **不建議** 等待直到至少 500 毫秒沒有網路連線。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
  • timeout float (選填)#

    最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout() 方法變更。

傳回


wait_for_url

新增於:v1.11 frame.wait_for_url

等待 frame 導覽至指定的 URL。

用法

frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
frame.wait_for_url("**/target.html")

引數

  • url str | Pattern | Callable[URL]:bool#

    在等待導覽時要比對的 glob 模式、正規表示式模式或接收 URL 的述詞。請注意,如果參數是不含萬用字元的字串,此方法將會等待導覽至與該字串完全相等的 URL。

  • timeout float (選填)#

    最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout() 方法變更。

  • wait_until "load" | "domcontentloaded" | "networkidle" | "commit" (選填)#

    何時視為操作成功,預設為 load。事件可以是

    • 'domcontentloaded' - 當 DOMContentLoaded 事件觸發時,視為操作完成。
    • 'load' - 當 load 事件觸發時,視為操作完成。
    • 'networkidle' - **不建議** 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
    • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


屬性

child_frames

在 v1.9 之前新增 frame.child_frames

用法

frame.child_frames

傳回


is_detached

在 v1.9 之前新增 frame.is_detached

如果 frame 已分離,則傳回 true,否則傳回 false

用法

frame.is_detached()

傳回


name

在 v1.9 之前新增 frame.name

傳回 frame 的 name 屬性,如標籤中所指定。

如果名稱為空,則改為傳回 id 屬性。

注意

此值會在 frame 建立時計算一次,如果稍後變更屬性,則不會更新。

用法

frame.name

傳回


page

在 v1.9 之前新增 frame.page

傳回包含此 frame 的頁面。

用法

frame.page

傳回


parent_frame

在 v1.9 之前新增 frame.parent_frame

父 frame(如果有的話)。已分離的 frame 和主要 frame 傳回 null

用法

frame.parent_frame

傳回


url

在 v1.9 之前新增 frame.url

傳回 frame 的 URL。

用法

frame.url

傳回


已過時

check

在 v1.9 之前新增 frame.check
不建議使用

請改用基於定位器的 locator.check()。深入瞭解定位器

此方法會執行下列步驟來檢查符合 selector(選擇器)的元素

  1. 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
  2. 確保相符的元素是核取方塊或單選按鈕輸入。如果不是,此方法會拋出錯誤。如果元素已核取,此方法會立即傳回。
  3. 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
  4. 如果需要,將元素捲動到檢視畫面中。
  5. 使用 page.mouse 在元素的中心點擊。
  6. 確保元素現在已核取。如果沒有,此方法會拋出錯誤。

當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。

用法

frame.check(selector)
frame.check(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • force bool (選填)#

    是否要略過可操作性檢查。預設為 false

  • no_wait_after bool (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position Dict (選填)新增於:v1.11#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定時,此方法只會執行可操作性檢查,並略過動作。預設為 false。在不執行動作的情況下,等待元素準備好執行動作時很有用。

傳回


click

在 v1.9 之前新增 frame.click
不建議使用

請改用基於定位器的 locator.click()。深入瞭解定位器

此方法會執行下列步驟來點擊符合 selector(選擇器)的元素

  1. 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
  2. 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
  3. 如果需要,將元素捲動到檢視畫面中。
  4. 使用 page.mouse 在元素的中心或指定的 position(位置)點擊。
  5. 等待啟動的導覽成功或失敗,除非設定 no_wait_after(不等待之後)選項。

當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。

用法

frame.click(selector)
frame.click(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • button "left" | "right" | "middle" (選填)#

    預設為 left

  • click_count int (選填)#

    預設為 1。請參閱 UIEvent.detail

  • delay float (選填)#

    mousedownmouseup 之間等待的時間(毫秒)。預設為 0。

  • force bool (選填)#

    是否要略過可操作性檢查。預設為 false

  • modifiers List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#

    要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

  • no_wait_after bool (選填)#

    已棄用

    此選項在未來將預設為 true

    啟動導覽的動作正在等待這些導覽發生以及頁面開始載入。您可以透過設定此旗標來選擇不等待。您只需要在特殊情況下使用此選項,例如導覽至無法存取的頁面。預設為 false

  • position Dict (選填)#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定後,此方法僅執行可操作性檢查,並略過動作。預設為 false。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤 modifiers(修飾鍵)將會被按下,無論 trial(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。

傳回


dblclick

在 v1.9 之前新增 frame.dblclick
不建議使用

請改用基於定位器的 locator.dblclick()。深入瞭解定位器

此方法會執行下列步驟來雙擊符合 selector(選擇器)的元素

  1. 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
  2. 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
  3. 如果需要,將元素捲動到檢視畫面中。
  4. 使用 page.mouse 在元素的中心或指定的 position(位置)雙擊。如果 dblclick() 的第一次點擊觸發了導覽事件,此方法將會拋出錯誤。

當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。

注意

frame.dblclick() 會分派兩個 click 事件和一個 dblclick 事件。

用法

frame.dblclick(selector)
frame.dblclick(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • button "left" | "right" | "middle" (選填)#

    預設為 left

  • delay float (選填)#

    mousedownmouseup 之間等待的時間(毫秒)。預設為 0。

  • force bool (選填)#

    是否要略過可操作性檢查。預設為 false

  • modifiers List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#

    要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

  • no_wait_after bool (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position Dict (選填)#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定後,此方法僅執行可操作性檢查,並略過動作。預設為 false。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤 modifiers(修飾鍵)將會被按下,無論 trial(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。

傳回


dispatch_event

在 v1.9 之前新增 frame.dispatch_event
不建議使用

請改用基於定位器的 locator.dispatch_event()。深入瞭解定位器

以下程式碼片段會在元素上分派 click 事件。無論元素的顯示狀態為何,都會分派 click 事件。這相當於呼叫 element.click()

用法

frame.dispatch_event("button#submit", "click")

在底層,它會根據給定的 type(類型)建立事件的執行個體,使用 event_init 屬性初始化它,並在元素上分派它。事件預設為 composedcancelable 和 bubble。

由於 event_init 具有事件特定性,請參閱事件文件以取得初始屬性清單

如果您希望將即時物件傳遞到事件中,您也可以將 JSHandle 指定為屬性值

# note you can only create data_transfer in chromium and firefox
data_transfer = frame.evaluate_handle("new DataTransfer()")
frame.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • type str#

    DOM 事件類型:"click""dragstart" 等。

  • event_init EvaluationArgument (選填)#

    選填的事件特定初始化屬性。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


eval_on_selector

新增於:v1.9 frame.eval_on_selector
不建議使用

此方法不會等待元素通過可操作性檢查,因此可能導致測試不穩定。請改用 locator.evaluate()、其他 Locator 輔助方法或 Web-first assertion。

傳回 expression 的傳回值。

此方法會在 frame 內尋找符合指定 selector 的元素,並將其作為第一個引數傳遞給 expression。如果沒有元素符合 selector,此方法會拋出錯誤。

如果 expression 傳回 Promise,則 frame.eval_on_selector() 將等待 Promise 解析並傳回其值。

用法

search_value = frame.eval_on_selector("#search", "el => el.value")
preload_href = frame.eval_on_selector("link[rel=preload]", "el => el.href")
html = frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")

引數

  • selector str#

    要查詢的 selector。

  • expression str#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選填)#

    要傳遞給 expression 的選填引數。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

傳回


eval_on_selector_all

新增於:v1.9 frame.eval_on_selector_all
不建議使用

在大多數情況下,locator.evaluate_all()、其他 Locator 輔助方法和 Web-first assertion 能更好地完成工作。

傳回 expression 的傳回值。

此方法會在 frame 內尋找所有符合指定 selector 的元素,並將相符元素的陣列作為第一個引數傳遞給 expression

如果 expression 傳回 Promise,則 frame.eval_on_selector_all() 將等待 Promise 解析並傳回其值。

用法

divs_counts = frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)

引數

  • selector str#

    要查詢的 selector。

  • expression str#

    要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。

  • arg EvaluationArgument (選填)#

    要傳遞給 expression 的選填引數。

傳回


expect_navigation

在 v1.9 之前新增 frame.expect_navigation
已棄用

此方法本質上具有競爭性,請改用 frame.wait_for_url()

等待 frame 導航並傳回主要資源回應。如果發生多次重新導向,導航將解析為最後一次重新導向的回應。如果導航到不同的錨點或由於 History API 使用而導航,導航將解析為 null

用法

此方法會等待 frame 導航到新的 URL。當您執行會間接導致 frame 導航的程式碼時,此方法非常有用。請考慮以下範例

with frame.expect_navigation():
frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
# Resolves after navigation has finished
注意

使用 History API 變更 URL 會被視為導航。

引數

  • timeout float (選填)#

    最大操作時間(毫秒),預設為 30 秒,傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout() 方法變更。

  • url str | Pattern | Callable[URL]:bool (選填)#

    在等待導覽時要比對的 glob 模式、正規表示式模式或接收 URL 的述詞。請注意,如果參數是不含萬用字元的字串,此方法將會等待導覽至與該字串完全相等的 URL。

  • wait_until "load" | "domcontentloaded" | "networkidle" | "commit" (選填)#

    何時視為操作成功,預設為 load。事件可以是

    • 'domcontentloaded' - 當 DOMContentLoaded 事件觸發時,視為操作完成。
    • 'load' - 當 load 事件觸發時,視為操作完成。
    • 'networkidle' - **不建議** 當至少 500 毫秒沒有網路連線時,視為操作完成。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
    • 'commit' - 當收到網路回應且文件開始載入時,視為操作完成。

傳回


fill

在 v1.9 之前新增 frame.fill
不建議使用

請改用基於 locator 的 locator.fill()。請參閱 locators 以了解更多資訊。

此方法會等待符合 selector 的元素,等待 可操作性 檢查,聚焦元素,填寫內容,並在填寫後觸發 input 事件。請注意,您可以傳遞空字串來清除輸入欄位。

如果目標元素不是 <input><textarea>[contenteditable] 元素,此方法會拋出錯誤。但是,如果元素位於具有關聯 control<label> 元素內,則會改為填寫 control。

若要傳送細緻的鍵盤事件,請使用 locator.press_sequentially()

用法

frame.fill(selector, value)
frame.fill(selector, value, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • value str#

    要為 <input><textarea>[contenteditable] 元素填寫的值。

  • force bool (選填)新增於:v1.13#

    是否要略過可操作性檢查。預設為 false

  • no_wait_after bool (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


focus

在 v1.9 之前新增 frame.focus
不建議使用

請改用基於 locator 的 locator.focus()。請參閱 locators 以了解更多資訊。

此方法會取得具有 selector 的元素並聚焦它。如果沒有符合 selector 的元素,此方法會等待直到 DOM 中出現相符的元素。

用法

frame.focus(selector)
frame.focus(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


get_attribute

在 v1.9 之前新增 frame.get_attribute
不建議使用

請改用基於 locator 的 locator.get_attribute()。請參閱 locators 以了解更多資訊。

傳回元素屬性值。

用法

frame.get_attribute(selector, name)
frame.get_attribute(selector, name, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • name str#

    要取得值的屬性名稱。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


hover

在 v1.9 之前新增 frame.hover
不建議使用

請改用基於 locator 的 locator.hover()。請參閱 locators 以了解更多資訊。

此方法會透過執行以下步驟,將滑鼠懸停在符合 selector 的元素上方

  1. 尋找符合 selector 的元素。如果沒有,請等待直到相符的元素附加到 DOM。
  2. 對相符的元素執行可操作性檢查,除非設定 force 選項。如果元素在檢查期間分離,則會重試整個動作。
  3. 如果需要,將元素捲動到檢視畫面中。
  4. 使用 page.mouse 將滑鼠懸停在元素的中心,或指定的 position

當所有步驟組合起來在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

用法

frame.hover(selector)
frame.hover(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • force bool (選填)#

    是否要略過可操作性檢查。預設為 false

  • modifiers List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#

    要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

  • no_wait_after bool (選填)新增於:v1.28#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position Dict (選填)#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定後,此方法僅執行可操作性檢查,並略過動作。預設為 false。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤 modifiers(修飾鍵)將會被按下,無論 trial(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。

傳回


inner_html

在 v1.9 之前新增 frame.inner_html
不建議使用

請改用基於 locator 的 locator.inner_html()。請參閱 locators 以了解更多資訊。

傳回 element.innerHTML

用法

frame.inner_html(selector)
frame.inner_html(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


inner_text

在 v1.9 之前新增 frame.inner_text
不建議使用

請改用基於 locator 的 locator.inner_text()。請參閱 locators 以了解更多資訊。

傳回 element.innerText

用法

frame.inner_text(selector)
frame.inner_text(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


input_value

新增於:v1.13 frame.input_value
不建議使用

請改用基於 locator 的 locator.input_value()。請參閱 locators 以了解更多資訊。

傳回所選取 <input><textarea><select> 元素的 input.value

針對非輸入元素拋出錯誤。但是,如果元素位於具有關聯 control<label> 元素內,則傳回 control 的值。

用法

frame.input_value(selector)
frame.input_value(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


is_checked

在 v1.9 之前新增 frame.is_checked
不建議使用

請改用基於 locator 的 locator.is_checked()。請參閱 locators 以了解更多資訊。

傳回元素是否被勾選。如果元素不是核取方塊或 radio 輸入,則拋出錯誤。

用法

frame.is_checked(selector)
frame.is_checked(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


is_disabled

在 v1.9 之前新增 frame.is_disabled
不建議使用

請改用基於 locator 的 locator.is_disabled()。請參閱 locators 以了解更多資訊。

傳回元素是否為停用狀態,與啟用狀態相反。

用法

frame.is_disabled(selector)
frame.is_disabled(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


is_editable

在 v1.9 之前新增 frame.is_editable
不建議使用

請改用基於 locator 的 locator.is_editable()。請參閱 locators 以了解更多資訊。

傳回元素是否為可編輯狀態。

用法

frame.is_editable(selector)
frame.is_editable(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


is_hidden

在 v1.9 之前新增 frame.is_hidden
不建議使用

請改用基於 locator 的 locator.is_hidden()。請參閱 locators 以了解更多資訊。

傳回元素是否為隱藏狀態,與可見狀態相反。selector 若未符合任何元素,則視為隱藏。

用法

frame.is_hidden(selector)
frame.is_hidden(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    已棄用

    此選項會被忽略。frame.is_hidden() 不會等待元素變成隱藏狀態,並立即傳回。

傳回


is_visible

在 v1.9 之前新增 frame.is_visible
不建議使用

請改用基於 locator 的 locator.is_visible()。請參閱 locators 以了解更多資訊。

傳回元素是否為可見狀態。selector 若未符合任何元素,則視為不可見。

用法

frame.is_visible(selector)
frame.is_visible(selector, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    已棄用

    此選項會被忽略。frame.is_visible() 不會等待元素變成可見狀態,並立即傳回。

傳回


press

在 v1.9 之前新增 frame.press
不建議使用

請改用基於 locator 的 locator.press()。請參閱 locators 以了解更多資訊。

key 可以指定預期的 keyboardEvent.key 值或產生文字的單一字元。key 值的超集可以在這裡找到。按鍵範例包括

F1 - F12Digit0- Digit9KeyA- KeyZBackquoteMinusEqualBackslashBackspaceTabDeleteEscapeArrowDownEndEnterHomeInsertPageDownPageUpArrowRightArrowUp 等。

也支援以下修改捷徑:ShiftControlAltMetaShiftLeftControlOrMetaControlOrMeta 在 Windows 和 Linux 上解析為 Control,在 macOS 上解析為 Meta

按住 Shift 將輸入與大寫 key 對應的文字。

如果 key 是單一字元,則會區分大小寫,因此值 aA 將產生不同的各自文字。

也支援諸如 key: "Control+o"key: "Control++key: "Control+Shift+T" 之類的快捷鍵。當使用修飾鍵指定時,在按下後續按鍵時,會按下並按住修飾鍵。

用法

frame.press(selector, key)
frame.press(selector, key, **kwargs)

引數

  • selector str#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • key str#

    要按下的按鍵名稱或要產生的字元,例如 ArrowLefta

  • delay float (選填)#

    keydownkeyup 之間等待的時間(以毫秒為單位)。預設為 0。

  • no_wait_after bool (選填)#

    已棄用

    此選項在未來將預設為 true

    啟動導覽的動作正在等待這些導覽發生以及頁面開始載入。您可以透過設定此旗標來選擇不等待。您只需要在特殊情況下使用此選項,例如導覽至無法存取的頁面。預設為 false

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout float (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


query_selector

新增於:v1.9 frame.query_selector
不建議使用

請改用基於 locator 的 frame.locator()。請參閱 locators 以了解更多資訊。

傳回指向 frame 元素的 ElementHandle。

注意

不建議使用 ElementHandle,請改用 Locator 物件和 Web-first assertion。

此方法會在 frame 內尋找符合指定 selector 的元素。如果沒有元素符合 selector,則傳回 null

用法

frame.query_selector(selector)
frame.query_selector(selector, **kwargs)

引數

  • selector str#

    要查詢的 selector。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

傳回


query_selector_all

新增於:v1.9 frame.query_selector_all
不建議使用

請改用基於 locator 的 frame.locator()。請參閱 locators 以了解更多資訊。

傳回指向 frame 元素的 ElementHandle 陣列。

注意

不建議使用 ElementHandle,請改用 Locator 物件。

此方法會在 frame 內尋找所有符合指定 selector 的元素。如果沒有元素符合 selector,則傳回空陣列。

用法

frame.query_selector_all(selector)

引數

  • selector str#

    要查詢的 selector。

傳回


select_option

在 v1.9 之前新增 frame.select_option
不建議使用

請改用基於 locator 的 locator.select_option()。請參閱 locators 以了解更多資訊。

此方法會等待符合 selector 的元素,等待可操作性檢查,等待直到所有指定的選項都出現在 <select> 元素中,然後選取這些選項。

如果目標元素不是 <select> 元素,此方法會拋出錯誤。但是,如果元素位於具有關聯控制項<label> 元素內,則會改為使用該控制項。

傳回已成功選取的選項值陣列。

一旦選取所有提供的選項,就會觸發 changeinput 事件。

用法

# Single selection matching the value or label
frame.select_option("select#colors", "blue")
# single selection matching both the label
frame.select_option("select#colors", label="blue")
# multiple selection
frame.select_option("select#colors", value=["red", "green", "blue"])

引數

傳回


set_checked

新增於:v1.15 frame.set_checked
不建議使用

請改用基於定位器的 locator.set_checked()。閱讀更多關於定位器的資訊。

此方法透過執行以下步驟,檢查或取消檢查符合 selector 的元素

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。
  3. 如果元素已具有正確的核取狀態,此方法會立即傳回。
  4. 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
  5. 如果需要,將元素捲動到檢視畫面中。
  6. 使用 page.mouse 在元素的中心點擊。
  7. 確保元素現在已核取或取消核取。如果不是,此方法會拋出錯誤。

當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

用法

frame.set_checked(selector, checked)
frame.set_checked(selector, checked, **kwargs)

引數

  • selector 字串 (str)#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • checked 布林值 (bool)#

    是否核取或取消核取核取方塊。

  • force 布林值 (bool) (選填)#

    是否要略過可操作性檢查。預設為 false

  • no_wait_after 布林值 (bool) (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position 字典 (Dict) (選填)#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 布林值 (bool) (選填)#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout 浮點數 (float) (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial 布林值 (bool) (選填)#

    設定時,此方法只會執行可操作性檢查,並略過動作。預設為 false。在不執行動作的情況下,等待元素準備好執行動作時很有用。

傳回


set_input_files

在 v1.9 之前新增 frame.set_input_files
不建議使用

請改用基於定位器的 locator.set_input_files()。閱讀更多關於定位器的資訊。

將檔案輸入的值設定為這些檔案路徑或檔案。如果某些 filePaths 是相對路徑,則它們會相對於目前的工作目錄解析。對於空陣列,清除選取的檔案。

此方法預期 selector 指向 input 元素。但是,如果元素位於具有關聯控制項<label> 元素內,則會改為以該控制項為目標。

用法

frame.set_input_files(selector, files)
frame.set_input_files(selector, files, **kwargs)

引數

傳回


tap

在 v1.9 之前新增 frame.tap
不建議使用

請改用基於定位器的 locator.tap()。閱讀更多關於定位器的資訊。

此方法透過執行以下步驟,點擊符合 selector 的元素

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
  3. 如果需要,將元素捲動到檢視畫面中。
  4. 使用 page.touchscreen 點擊元素的中心,或指定的 position

當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

注意

frame.tap() 要求瀏覽器內容的 hasTouch 選項設定為 true。

用法

frame.tap(selector)
frame.tap(selector, **kwargs)

引數

  • selector 字串 (str)#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • force 布林值 (bool) (選填)#

    是否要略過可操作性檢查。預設為 false

  • modifiers 列表 (List)["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#

    要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。

  • no_wait_after 布林值 (bool) (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position 字典 (Dict) (選填)#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout 浮點數 (float) (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定後,此方法僅執行可操作性檢查,並略過動作。預設為 false。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤 modifiers(修飾鍵)將會被按下,無論 trial(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。

傳回


text_content

在 v1.9 之前新增 frame.text_content
不建議使用

請改用基於定位器的 locator.text_content()。閱讀更多關於定位器的資訊。

傳回 element.textContent

用法

frame.text_content(selector)
frame.text_content(selector, **kwargs)

引數

傳回


type

在 v1.9 之前新增 frame.type
已棄用

在大多數情況下,您應該改用 locator.fill()。只有在頁面上有特殊的鍵盤處理時,才需要逐個按下按鍵 - 在這種情況下,請使用 locator.press_sequentially()

為文字中的每個字元傳送 keydownkeypress/inputkeyup 事件。frame.type 可用於傳送細緻的鍵盤事件。若要在表單欄位中填寫值,請使用 frame.fill()

若要按下特殊按鍵,例如 ControlArrowDown,請使用 keyboard.press()

用法

引數

傳回


uncheck

在 v1.9 之前新增 frame.uncheck
不建議使用

請改用基於定位器的 locator.uncheck()。閱讀更多關於定位器的資訊。

此方法透過執行以下步驟,檢查符合 selector 的元素

  1. 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
  2. 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。如果元素已取消核取,此方法會立即傳回。
  3. 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
  4. 如果需要,將元素捲動到檢視畫面中。
  5. 使用 page.mouse 在元素的中心點擊。
  6. 確保元素現在已取消核取。如果不是,此方法會拋出錯誤。

當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。

用法

frame.uncheck(selector)
frame.uncheck(selector, **kwargs)

引數

  • selector 字串 (str)#

    用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。

  • force 布林值 (bool) (選填)#

    是否要略過可操作性檢查。預設為 false

  • no_wait_after 布林值 (bool) (選填)#

    已棄用

    此選項沒有效果。

    此選項沒有效果。

  • position Dict (選填)新增於:v1.11#

    要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。

  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout 浮點數 (float) (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

  • trial bool (選填)新增於:v1.11#

    設定時,此方法只會執行可操作性檢查,並略過動作。預設為 false。在不執行動作的情況下,等待元素準備好執行動作時很有用。

傳回


wait_for_selector

在 v1.9 之前新增 frame.wait_for_selector
不建議使用

請改用聲明可見性的 Web 斷言或基於定位器的 locator.wait_for()。閱讀更多關於定位器的資訊。

當 selector 指定的元素滿足 state 選項時傳回。如果等待 hiddendetached,則傳回 null

注意

Playwright 會自動等待元素準備就緒,然後再執行動作。使用 Locator 物件和 Web 優先斷言使程式碼無需 wait-for-selector。

等待 selector 滿足 state 選項(出現/從 DOM 中消失,或變為可見/隱藏)。如果在呼叫方法時 selector 已滿足條件,則該方法將立即傳回。如果在 timeout 毫秒內 selector 未滿足條件,則該函數將拋出錯誤。

用法

此方法跨導航運作

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
chromium = playwright.chromium
browser = chromium.launch()
page = browser.new_page()
for current_url in ["https://google.com", "https://bbc.com"]:
page.goto(current_url, wait_until="domcontentloaded")
element = page.main_frame.wait_for_selector("img")
print("Loaded image: " + str(element.get_attribute("src")))
browser.close()

with sync_playwright() as playwright:
run(playwright)

引數

  • selector 字串 (str)#

    要查詢的 selector。

  • state "attached" | "detached" | "visible" | "hidden" (選填)#

    預設為 'visible'。可以是以下之一

    • 'attached' - 等待元素出現在 DOM 中。
    • 'detached' - 等待元素未出現在 DOM 中。
    • 'visible' - 等待元素具有非空的邊界框且沒有 visibility:hidden。請注意,沒有任何內容或具有 display:none 的元素具有空的邊界框,且不被視為可見。
    • 'hidden' - 等待元素從 DOM 中分離,或具有空的邊界框或 visibility:hidden。這與 'visible' 選項相反。
  • strict 新增於:v1.14#

    如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。

  • timeout 浮點數 (float) (選填)#

    最大時間 (以毫秒為單位)。預設為 30000 (30 秒)。傳遞 0 以停用逾時。預設值可以使用 browser_context.set_default_timeout()page.set_default_timeout() 方法變更。

傳回


wait_for_timeout

在 v1.9 之前新增 frame.wait_for_timeout
不建議使用

永遠不要在生產環境中等待 timeout。等待時間的測試本質上是不穩定的。請改用 Locator 動作和自動等待的 Web 斷言。

等待給定的 timeout,以毫秒為單位。

請注意,frame.waitForTimeout() 應僅用於偵錯。在生產環境中使用計時器的測試將會變得不穩定。請改用訊號,例如網路事件、selector 變為可見等等。

用法

frame.wait_for_timeout(timeout)

引數

傳回