Frame
在任何時間點,頁面都會透過 page.main_frame 和 frame.child_frames 方法公開其目前的 frame 樹狀結構。
Frame 物件的生命週期由三個事件控制,這些事件在 page 物件上分派
- page.on("frameattached") - 當 frame 附加到頁面時觸發。Frame 只能附加到頁面一次。
- page.on("framenavigated") - 當 frame 提交導航到不同的 URL 時觸發。
- page.on("framedetached") - 當 frame 從頁面分離時觸發。Frame 只能從頁面分離一次。
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)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
firefox = playwright.firefox
browser = await firefox.launch()
page = await browser.new_page()
await page.goto("https://www.theverge.com")
dump_frame_tree(page.main_frame, "")
await 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 + " ")
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
方法
add_script_tag
在 v1.9 之前新增當 script 的 onload 事件觸發或當 script 內容注入到 frame 時,傳回新增的標籤。
將 <script>
標籤與所需的 url 或內容新增到頁面中。
用法
frame.add_script_tag()
frame.add_script_tag(**kwargs)
引數
-
要注入到 frame 中的原始 JavaScript 內容。
-
path
Union[str, pathlib.Path] (選用)#要注入到 frame 中的 JavaScript 檔案路徑。如果
path
是相對路徑,則會相對於目前的工作目錄解析。 -
Script 類型。使用 'module' 以載入 JavaScript ES6 模組。請參閱 script 以取得更多詳細資訊。
-
要新增的 script URL。
傳回
add_style_tag
在 v1.9 之前新增當樣式表的 onload 事件觸發或當 CSS 內容注入到 frame 時,傳回新增的標籤。
將 <link rel="stylesheet">
標籤與所需的 url 或 <style type="text/css">
標籤與內容新增到頁面中。
用法
frame.add_style_tag()
frame.add_style_tag(**kwargs)
引數
-
要注入到 frame 中的原始 CSS 內容。
-
path
Union[str, pathlib.Path] (選用)#要注入到 frame 中的 CSS 檔案路徑。如果
path
是相對路徑,則會相對於目前的工作目錄解析。 -
<link>
標籤的 URL。
傳回
content
在 v1.9 之前新增取得 frame 的完整 HTML 內容,包括 doctype。
用法
frame.content()
傳回
drag_and_drop
新增於:v1.13用法
frame.drag_and_drop(source, target)
frame.drag_and_drop(source, target, **kwargs)
引數
-
要搜尋要拖曳之元素的選取器。如果有多個元素符合選取器,則會使用第一個。
-
要搜尋要放置到其上的元素的選取器。如果有多個元素符合選取器,則會使用第一個。
-
是否要略過可操作性檢查。預設為
false
。 -
已棄用
此選項沒有效果。
此選項沒有效果。
-
source_position
Dict (選用)新增於:v1.14#在此點擊來源元素,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某個可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
target_position
Dict (選用)新增於:v1.14#在此點放置到目標元素上,相對於元素填補方塊的左上角。如果未指定,則會使用元素的某個可見點。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定時,此方法只會執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
傳回
evaluate
在 v1.9 之前新增傳回 expression 的傳回值。
如果傳遞至 frame.evaluate() 的函式傳回 Promise,則 frame.evaluate() 會等待 Promise 解析並傳回其值。
如果傳遞至 frame.evaluate() 的函式傳回非 Serializable 值,則 frame.evaluate() 會傳回 undefined
。Playwright 也支援傳輸一些 JSON
無法序列化的其他值:-0
、NaN
、Infinity
、-Infinity
。
用法
- 同步
- 非同步
result = frame.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
print(result) # prints "56"
result = await 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"
print(await frame.evaluate("1 + 2")) # prints "3"
x = 10
print(await 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()
body_handle = await frame.evaluate("document.body")
html = await frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
await body_handle.dispose()
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#要傳遞至 expression 的選用引數。
傳回
evaluate_handle
在 v1.9 之前新增以 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_window_handle = await frame.evaluate_handle("Promise.resolve(window)")
a_window_handle # handle for the window object.
也可以傳入字串來代替函式。
- 同步
- 非同步
a_handle = page.evaluate_handle("document") # handle for the "document"
a_handle = await 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()
a_handle = await page.evaluate_handle("document.body")
result_handle = await page.evaluate_handle("body => body.innerHTML", a_handle)
print(await result_handle.json_value())
await result_handle.dispose()
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選用)#要傳遞至 expression 的選用引數。
傳回
frame_element
在 v1.9 之前新增傳回對應於此 frame 的 frame
或 iframe
元素控制代碼。
這是 element_handle.content_frame() 的反向操作。請注意,傳回的控制代碼實際上屬於父 frame。
如果 frame 在 frameElement()
傳回之前已分離,則此方法會擲回錯誤。
用法
- 同步
- 非同步
frame_element = frame.frame_element()
content_frame = frame_element.content_frame()
assert frame == content_frame
frame_element = await frame.frame_element()
content_frame = await frame_element.content_frame()
assert frame == content_frame
傳回
frame_locator
新增於:v1.17使用 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()
locator = frame.frame_locator("#my-iframe").get_by_text("Submit")
await locator.click()
引數
傳回
get_by_alt_text
新增於:v1.27允許依據元素的替代文字定位元素。
用法
例如,此方法會依據替代文字 "Playwright logo" 尋找影像
<img alt='Playwright logo'>
- 同步
- 非同步
page.get_by_alt_text("Playwright logo").click()
await page.get_by_alt_text("Playwright logo").click()
引數
-
要定位元素的文字。
-
是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。
傳回
get_by_label
新增於:v1.27允許依據相關聯 <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")
await page.get_by_label("Username").fill("john")
await page.get_by_label("Password").fill("secret")
引數
-
要定位元素的文字。
-
是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。
傳回
get_by_placeholder
新增於:v1.27允許依據預留位置文字定位輸入元素。
用法
例如,考量以下 DOM 結構。
<input type="email" placeholder="name@example.com" />
您可以在依據預留位置文字定位輸入後填寫輸入
- 同步
- 非同步
page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
await page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
引數
-
要定位元素的文字。
-
是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。
傳回
get_by_role
新增於:v1.27允許依據元素的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()
await expect(page.get_by_role("heading", name="Sign up")).to_be_visible()
await page.get_by_role("checkbox", name="Subscribe").check()
await 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 角色。
-
通常由
aria-checked
或原生<input type=checkbox>
控制項設定的屬性。深入瞭解
aria-checked
。 -
通常由
aria-disabled
或disabled
設定的屬性。注意與大多數其他屬性不同,
disabled
會透過 DOM 階層繼承。深入瞭解aria-disabled
。 -
是否完全比對 name:區分大小寫且為完整字串。預設為 false。name 是規則運算式時會忽略。請注意,完全符合的項目仍會修剪空白字元。
-
通常由
aria-expanded
設定的屬性。深入瞭解
aria-expanded
。 -
控制是否比對隱藏元素的選項。根據預設,只有非隱藏元素 (如 ARIA 定義) 會由角色選取器比對。
深入瞭解
aria-hidden
。 -
數字屬性,通常用於角色
heading
、listitem
、row
、treeitem
,<h1>-<h6>
元素的預設值。深入瞭解
aria-level
。 -
比對可存取名稱的選項。根據預設,比對不區分大小寫,並搜尋子字串,使用 exact 控制此行為。
深入瞭解可存取名稱。
-
通常由
aria-pressed
設定的屬性。深入瞭解
aria-pressed
。 -
通常由
aria-selected
設定的屬性。深入瞭解
aria-selected
。
傳回
詳細資訊
角色選取器無法取代可存取性稽核和一致性測試,而是提供關於 ARIA 指導方針的早期意見反應。
許多 html 元素都有隱含的 定義角色,角色選取器會辨識該角色。您可以在此處找到所有支援的角色。ARIA 指導方針不建議透過將 role
和/或 aria-*
屬性設定為預設值來重複隱含角色和屬性。
get_by_test_id
新增於:v1.27依據測試 ID 定位元素。
用法
考量以下 DOM 結構。
<button data-testid="directions">Itinéraire</button>
您可以依據元素的測試 ID 定位元素
- 同步
- 非同步
page.get_by_test_id("directions").click()
await page.get_by_test_id("directions").click()
引數
傳回
詳細資訊
根據預設,data-testid
屬性會用作測試 ID。如有必要,請使用 selectors.set_test_id_attribute() 設定不同的測試 ID 屬性。
get_by_text
新增於:v1.27允許尋找包含指定文字的元素。
另請參閱 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))
# 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))
引數
-
要定位元素的文字。
-
是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。
傳回
詳細資訊
即使使用完全比對,依文字比對時永遠會正規化空白字元。例如,它會將多個空格轉換為一個空格,將換行符號轉換為空格,並忽略開頭和結尾的空白字元。
類型為 button
和 submit
的輸入元素會依其 value
而非文字內容進行比對。例如,依文字 "Log in"
尋找會比對到 <input type=button value="Log in">
。
get_by_title
新增於:v1.27允許依據元素的 title 屬性尋找元素。
用法
考量以下 DOM 結構。
<span title='Issues count'>25 issues</span>
您可以在依 title 文字尋找到元素後,檢查問題計數
- 同步
- 非同步
expect(page.get_by_title("Issues count")).to_have_text("25 issues")
await expect(page.get_by_title("Issues count")).to_have_text("25 issues")
引數
-
要定位元素的文字。
-
是否尋找完全符合的項目:區分大小寫且為完整字串。預設為 false。依據規則運算式定位時會忽略。請注意,完全符合的項目仍會修剪空白字元。
傳回
goto
在 v1.9 之前新增傳回主要資源回應。在多次重新導向的情況下,導覽將會以最後一次重新導向的回應進行解析。
在以下情況下,此方法將會拋出錯誤
- 發生 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)
引數
-
要將 frame 導覽至的 URL。URL 應包含 scheme,例如
https://
。 -
Referer 標頭值。如果提供,則其優先順序高於由 page.set_extra_http_headers() 設定的 referer 標頭值。
-
最大操作時間(毫秒),預設為 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 之前新增傳回元素是否為 enabled(啟用)。
用法
frame.is_enabled(selector)
frame.is_enabled(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
locator
新增於:v1.14此方法傳回元素定位器,可用於在此頁面/frame 上執行動作。定位器會在執行動作之前立即解析為元素,因此對相同定位器執行的一系列動作實際上可能會在不同的 DOM 元素上執行。如果這些動作之間的 DOM 結構已變更,就會發生這種情況。
用法
frame.locator(selector)
frame.locator(selector, **kwargs)
引數
-
解析 DOM 元素時要使用的選取器。
-
將此方法的結果縮小為包含與此相對定位器相符之元素的結果。例如,具有
text=Playwright
的article
會比對到<article><div>Playwright</div></article>
。內部定位器**必須相對於**外部定位器,並且從外部定位器比對開始查詢,而不是從文件根目錄開始。例如,您可以在
<article><content><div>Playwright</div></content></article>
中找到具有div
的content
。但是,尋找具有article div
的content
將會失敗,因為內部定位器必須是相對的,且不應使用content
外部的任何元素。請注意,外部和內部定位器必須屬於相同的 frame。內部定位器不得包含 FrameLocator。
-
has_not
Locator (選填)新增於:v1.33#比對不包含與內部定位器相符之元素的元素。內部定位器會針對外部定位器進行查詢。例如,不具有
div
的article
會比對到<article><span>Playwright</span></article>
。請注意,外部和內部定位器必須屬於相同的 frame。內部定位器不得包含 FrameLocator。
-
has_not_text
str | Pattern (選填)新增於:v1.33#比對在內部某處(可能在子元素或後代元素中)不包含指定文字的元素。當傳遞 [字串] 時,比對會區分大小寫並搜尋子字串。
-
比對在內部某處(可能在子元素或後代元素中)包含指定文字的元素。當傳遞 [字串] 時,比對會區分大小寫並搜尋子字串。例如,
"Playwright"
會比對到<article><div>Playwright</div></article>
。
傳回
set_content
在 v1.9 之前新增此方法在內部呼叫 document.write(),並繼承其所有特定特性和行為。
用法
frame.set_content(html)
frame.set_content(html, **kwargs)
引數
-
要指派給頁面的 HTML 標記。
-
最大操作時間(毫秒),預設為 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()
傳回
wait_for_function
在 v1.9 之前新增當 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)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch()
page = await browser.new_page()
await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
await page.main_frame.wait_for_function("() => window.x > 0")
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
若要將引數傳遞至 frame.waitForFunction
函式的述詞
- 同步
- 非同步
selector = ".foo"
frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
selector = ".foo"
await frame.wait_for_function("selector => !!document.querySelector(selector)", selector)
引數
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選填)#要傳遞至 expression(表達式)的選用引數。
-
如果 polling 為
'raf'
,則 expression(表達式)會在requestAnimationFrame
回呼中持續執行。如果 polling 是數字,則會將其視為函式執行的間隔(毫秒)。預設為raf
。 -
最長等待時間(毫秒)。預設值為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
wait_for_load_state
在 v1.9 之前新增等待達到要求的載入狀態。
當 frame 達到要求的載入狀態時,此方法會傳回,預設為 load
。當呼叫此方法時,導覽必須已提交。如果目前文件已達到要求的狀態,則會立即解析。
大多數情況下,不需要此方法,因為 Playwright 會在每個動作前自動等待。
用法
- 同步
- 非同步
frame.click("button") # click triggers navigation.
frame.wait_for_load_state() # the promise resolves after "load" event.
await frame.click("button") # click triggers navigation.
await frame.wait_for_load_state() # the promise resolves after "load" event.
引數
-
state
"load" | "domcontentloaded" | "networkidle" (選填)#要等待的選用載入狀態,預設為
load
。如果在載入目前文件時已達到該狀態,則此方法會立即解析。可以是下列其中之一'load'
- 等待load
事件觸發。'domcontentloaded'
- 等待DOMContentLoaded
事件觸發。'networkidle'
- **不建議** 等待直到至少500
毫秒沒有網路連線。請勿將此方法用於測試,而是依賴網頁斷言來評估就緒狀態。
-
最大操作時間(毫秒),預設為 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 導覽至指定的 URL。
用法
- 同步
- 非同步
frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
frame.wait_for_url("**/target.html")
await frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
await frame.wait_for_url("**/target.html")
引數
-
url
str | Pattern | Callable[URL]:bool#在等待導覽時要比對的 glob 模式、正規表示式模式或接收 URL 的述詞。請注意,如果參數是不含萬用字元的字串,此方法將會等待導覽至與該字串完全相等的 URL。
-
最大操作時間(毫秒),預設為 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
傳回
is_detached
在 v1.9 之前新增如果 frame 已分離,則傳回 true
,否則傳回 false
。
用法
frame.is_detached()
傳回
name
在 v1.9 之前新增傳回 frame 的 name 屬性,如標籤中所指定。
如果名稱為空,則改為傳回 id 屬性。
此值會在 frame 建立時計算一次,如果稍後變更屬性,則不會更新。
用法
frame.name
傳回
page
在 v1.9 之前新增傳回包含此 frame 的頁面。
用法
frame.page
傳回
parent_frame
在 v1.9 之前新增父 frame(如果有的話)。已分離的 frame 和主要 frame 傳回 null
。
用法
frame.parent_frame
傳回
url
在 v1.9 之前新增傳回 frame 的 URL。
用法
frame.url
傳回
已過時
check
在 v1.9 之前新增請改用基於定位器的 locator.check()。深入瞭解定位器。
此方法會執行下列步驟來檢查符合 selector(選擇器)的元素
- 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
- 確保相符的元素是核取方塊或單選按鈕輸入。如果不是,此方法會拋出錯誤。如果元素已核取,此方法會立即傳回。
- 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已核取。如果沒有,此方法會拋出錯誤。
當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
用法
frame.check(selector)
frame.check(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
是否要略過可操作性檢查。預設為
false
。 -
已棄用
此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定時,此方法只會執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
傳回
click
在 v1.9 之前新增請改用基於定位器的 locator.click()。深入瞭解定位器。
此方法會執行下列步驟來點擊符合 selector(選擇器)的元素
- 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
- 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 在元素的中心或指定的 position(位置)點擊。
- 等待啟動的導覽成功或失敗,除非設定 no_wait_after(不等待之後)選項。
當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
用法
frame.click(selector)
frame.click(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
button
"left" | "right" | "middle" (選填)#預設為
left
。 -
預設為 1。請參閱 UIEvent.detail。
-
mousedown
和mouseup
之間等待的時間(毫秒)。預設為 0。 -
是否要略過可操作性檢查。預設為
false
。 -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已棄用
此選項在未來將預設為
true
。啟動導覽的動作正在等待這些導覽發生以及頁面開始載入。您可以透過設定此旗標來選擇不等待。您只需要在特殊情況下使用此選項,例如導覽至無法存取的頁面。預設為
false
。 -
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤modifiers
(修飾鍵)將會被按下,無論trial
(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。
傳回
dblclick
在 v1.9 之前新增請改用基於定位器的 locator.dblclick()。深入瞭解定位器。
此方法會執行下列步驟來雙擊符合 selector(選擇器)的元素
- 尋找符合 selector(選擇器)的元素。如果沒有,則等待直到相符的元素附加到 DOM。
- 等待對相符的元素進行可操作性檢查,除非設定 force(強制)選項。如果在檢查期間元素已分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 在元素的中心或指定的 position(位置)雙擊。如果
dblclick()
的第一次點擊觸發了導覽事件,此方法將會拋出錯誤。
當所有步驟合併後未在指定的 timeout(逾時)內完成時,此方法會拋出 TimeoutError。傳遞零逾時會停用此功能。
frame.dblclick()
會分派兩個 click
事件和一個 dblclick
事件。
用法
frame.dblclick(selector)
frame.dblclick(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
button
"left" | "right" | "middle" (選填)#預設為
left
。 -
mousedown
和mouseup
之間等待的時間(毫秒)。預設為 0。 -
是否要略過可操作性檢查。預設為
false
。 -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
已棄用
此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤modifiers
(修飾鍵)將會被按下,無論trial
(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。
傳回
dispatch_event
在 v1.9 之前新增請改用基於定位器的 locator.dispatch_event()。深入瞭解定位器。
以下程式碼片段會在元素上分派 click
事件。無論元素的顯示狀態為何,都會分派 click
事件。這相當於呼叫 element.click()。
用法
- 同步
- 非同步
frame.dispatch_event("button#submit", "click")
await frame.dispatch_event("button#submit", "click")
在底層,它會根據給定的 type(類型)建立事件的執行個體,使用 event_init 屬性初始化它,並在元素上分派它。事件預設為 composed
、cancelable
和 bubble。
由於 event_init 具有事件特定性,請參閱事件文件以取得初始屬性清單
- DeviceMotionEvent
- DeviceOrientationEvent
- DragEvent
- Event
- FocusEvent
- KeyboardEvent
- MouseEvent
- PointerEvent
- TouchEvent
- WheelEvent
如果您希望將即時物件傳遞到事件中,您也可以將 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 })
# note you can only create data_transfer in chromium and firefox
data_transfer = await frame.evaluate_handle("new DataTransfer()")
await frame.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
DOM 事件類型:
"click"
、"dragstart"
等。 -
event_init
EvaluationArgument (選填)#選填的事件特定初始化屬性。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
eval_on_selector
新增於:v1.9此方法不會等待元素通過可操作性檢查,因此可能導致測試不穩定。請改用 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")
search_value = await frame.eval_on_selector("#search", "el => el.value")
preload_href = await frame.eval_on_selector("link[rel=preload]", "el => el.href")
html = await frame.eval_on_selector(".main-container", "(e, suffix) => e.outerHTML + suffix", "hello")
引數
-
要查詢的 selector。
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選填)#要傳遞給 expression 的選填引數。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
傳回
eval_on_selector_all
新增於:v1.9在大多數情況下,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)
divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
引數
-
要查詢的 selector。
-
要在瀏覽器內容中評估的 JavaScript 運算式。如果運算式評估為函式,則會自動叫用該函式。
-
arg
EvaluationArgument (選填)#要傳遞給 expression 的選填引數。
傳回
expect_navigation
在 v1.9 之前新增此方法本質上具有競爭性,請改用 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
async with frame.expect_navigation():
await frame.click("a.delayed-navigation") # clicking the link will indirectly cause a navigation
# Resolves after navigation has finished
使用 History API 變更 URL 會被視為導航。
引數
-
最大操作時間(毫秒),預設為 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 之前新增請改用基於 locator 的 locator.fill()。請參閱 locators 以了解更多資訊。
此方法會等待符合 selector 的元素,等待 可操作性 檢查,聚焦元素,填寫內容,並在填寫後觸發 input
事件。請注意,您可以傳遞空字串來清除輸入欄位。
如果目標元素不是 <input>
、<textarea>
或 [contenteditable]
元素,此方法會拋出錯誤。但是,如果元素位於具有關聯 control 的 <label>
元素內,則會改為填寫 control。
若要傳送細緻的鍵盤事件,請使用 locator.press_sequentially()。
用法
frame.fill(selector, value)
frame.fill(selector, value, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
要為
<input>
、<textarea>
或[contenteditable]
元素填寫的值。 -
是否要略過可操作性檢查。預設為
false
。 -
已棄用
此選項沒有效果。
此選項沒有效果。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
focus
在 v1.9 之前新增請改用基於 locator 的 locator.focus()。請參閱 locators 以了解更多資訊。
此方法會取得具有 selector 的元素並聚焦它。如果沒有符合 selector 的元素,此方法會等待直到 DOM 中出現相符的元素。
用法
frame.focus(selector)
frame.focus(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
get_attribute
在 v1.9 之前新增請改用基於 locator 的 locator.get_attribute()。請參閱 locators 以了解更多資訊。
傳回元素屬性值。
用法
frame.get_attribute(selector, name)
frame.get_attribute(selector, name, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
要取得值的屬性名稱。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
hover
在 v1.9 之前新增請改用基於 locator 的 locator.hover()。請參閱 locators 以了解更多資訊。
此方法會透過執行以下步驟,將滑鼠懸停在符合 selector 的元素上方
- 尋找符合 selector 的元素。如果沒有,請等待直到相符的元素附加到 DOM。
- 對相符的元素執行可操作性檢查,除非設定 force 選項。如果元素在檢查期間分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 將滑鼠懸停在元素的中心,或指定的 position。
當所有步驟組合起來在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
frame.hover(selector)
frame.hover(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
是否要略過可操作性檢查。預設為
false
。 -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
no_wait_after
bool (選填)新增於:v1.28#已棄用此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤modifiers
(修飾鍵)將會被按下,無論trial
(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。
傳回
inner_html
在 v1.9 之前新增請改用基於 locator 的 locator.inner_html()。請參閱 locators 以了解更多資訊。
傳回 element.innerHTML
。
用法
frame.inner_html(selector)
frame.inner_html(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
inner_text
在 v1.9 之前新增請改用基於 locator 的 locator.inner_text()。請參閱 locators 以了解更多資訊。
傳回 element.innerText
。
用法
frame.inner_text(selector)
frame.inner_text(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
input_value
新增於:v1.13請改用基於 locator 的 locator.input_value()。請參閱 locators 以了解更多資訊。
傳回所選取 <input>
或 <textarea>
或 <select>
元素的 input.value
。
針對非輸入元素拋出錯誤。但是,如果元素位於具有關聯 control 的 <label>
元素內,則傳回 control 的值。
用法
frame.input_value(selector)
frame.input_value(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
is_checked
在 v1.9 之前新增請改用基於 locator 的 locator.is_checked()。請參閱 locators 以了解更多資訊。
傳回元素是否被勾選。如果元素不是核取方塊或 radio 輸入,則拋出錯誤。
用法
frame.is_checked(selector)
frame.is_checked(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
is_disabled
在 v1.9 之前新增請改用基於 locator 的 locator.is_disabled()。請參閱 locators 以了解更多資訊。
傳回元素是否為停用狀態,與啟用狀態相反。
用法
frame.is_disabled(selector)
frame.is_disabled(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
is_editable
在 v1.9 之前新增請改用基於 locator 的 locator.is_editable()。請參閱 locators 以了解更多資訊。
傳回元素是否為可編輯狀態。
用法
frame.is_editable(selector)
frame.is_editable(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
is_hidden
在 v1.9 之前新增請改用基於 locator 的 locator.is_hidden()。請參閱 locators 以了解更多資訊。
傳回元素是否為隱藏狀態,與可見狀態相反。selector 若未符合任何元素,則視為隱藏。
用法
frame.is_hidden(selector)
frame.is_hidden(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已棄用
此選項會被忽略。frame.is_hidden() 不會等待元素變成隱藏狀態,並立即傳回。
傳回
is_visible
在 v1.9 之前新增請改用基於 locator 的 locator.is_visible()。請參閱 locators 以了解更多資訊。
傳回元素是否為可見狀態。selector 若未符合任何元素,則視為不可見。
用法
frame.is_visible(selector)
frame.is_visible(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
已棄用
此選項會被忽略。frame.is_visible() 不會等待元素變成可見狀態,並立即傳回。
傳回
press
在 v1.9 之前新增請改用基於 locator 的 locator.press()。請參閱 locators 以了解更多資訊。
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
等。
也支援以下修改捷徑:Shift
、Control
、Alt
、Meta
、ShiftLeft
、ControlOrMeta
。ControlOrMeta
在 Windows 和 Linux 上解析為 Control
,在 macOS 上解析為 Meta
。
按住 Shift
將輸入與大寫 key 對應的文字。
如果 key 是單一字元,則會區分大小寫,因此值 a
和 A
將產生不同的各自文字。
也支援諸如 key: "Control+o"
、key: "Control++
或 key: "Control+Shift+T"
之類的快捷鍵。當使用修飾鍵指定時,在按下後續按鍵時,會按下並按住修飾鍵。
用法
frame.press(selector, key)
frame.press(selector, key, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
要按下的按鍵名稱或要產生的字元,例如
ArrowLeft
或a
。 -
keydown
和keyup
之間等待的時間(以毫秒為單位)。預設為 0。 -
已棄用
此選項在未來將預設為
true
。啟動導覽的動作正在等待這些導覽發生以及頁面開始載入。您可以透過設定此旗標來選擇不等待。您只需要在特殊情況下使用此選項,例如導覽至無法存取的頁面。預設為
false
。 -
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
query_selector
新增於:v1.9請改用基於 locator 的 frame.locator()。請參閱 locators 以了解更多資訊。
傳回指向 frame 元素的 ElementHandle。
不建議使用 ElementHandle,請改用 Locator 物件和 Web-first assertion。
此方法會在 frame 內尋找符合指定 selector 的元素。如果沒有元素符合 selector,則傳回 null
。
用法
frame.query_selector(selector)
frame.query_selector(selector, **kwargs)
引數
傳回
query_selector_all
新增於:v1.9請改用基於 locator 的 frame.locator()。請參閱 locators 以了解更多資訊。
傳回指向 frame 元素的 ElementHandle 陣列。
不建議使用 ElementHandle,請改用 Locator 物件。
此方法會在 frame 內尋找所有符合指定 selector 的元素。如果沒有元素符合 selector,則傳回空陣列。
用法
frame.query_selector_all(selector)
引數
傳回
select_option
在 v1.9 之前新增請改用基於 locator 的 locator.select_option()。請參閱 locators 以了解更多資訊。
此方法會等待符合 selector 的元素,等待可操作性檢查,等待直到所有指定的選項都出現在 <select>
元素中,然後選取這些選項。
如果目標元素不是 <select>
元素,此方法會拋出錯誤。但是,如果元素位於具有關聯控制項的 <label>
元素內,則會改為使用該控制項。
傳回已成功選取的選項值陣列。
一旦選取所有提供的選項,就會觸發 change
和 input
事件。
用法
- 同步
- 非同步
# 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"])
# Single selection matching the value or label
await frame.select_option("select#colors", "blue")
# single selection matching the label
await frame.select_option("select#colors", label="blue")
# multiple selection
await frame.select_option("select#colors", value=["red", "green", "blue"])
引數
-
要查詢的 selector。
-
是否要略過可操作性檢查。預設為
false
。 -
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
element
ElementHandle | 列表 (List)[ElementHandle] (選填)#要選取的選項元素。選填。
-
index
整數 (int) | 列表 (List)[整數 (int)] (選填)#依索引選取的選項。選填。
-
value
字串 (str) | 列表 (List)[字串 (str)] (選填)#依值選取的選項。如果
<select>
具有multiple
屬性,則會選取所有給定的選項,否則只會選取第一個符合傳遞選項之一的選項。選填。 -
label
字串 (str) | 列表 (List)[字串 (str)] (選填)#依標籤選取的選項。如果
<select>
具有multiple
屬性,則會選取所有給定的選項,否則只會選取第一個符合傳遞選項之一的選項。選填。
傳回
set_checked
新增於:v1.15請改用基於定位器的 locator.set_checked()。閱讀更多關於定位器的資訊。
此方法透過執行以下步驟,檢查或取消檢查符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。
- 如果元素已具有正確的核取狀態,此方法會立即傳回。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已核取或取消核取。如果不是,此方法會拋出錯誤。
當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
frame.set_checked(selector, checked)
frame.set_checked(selector, checked, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
checked
布林值 (bool)#是否核取或取消核取核取方塊。
-
force
布林值 (bool) (選填)#是否要略過可操作性檢查。預設為
false
。 -
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
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 之前新增請改用基於定位器的 locator.set_input_files()。閱讀更多關於定位器的資訊。
將檔案輸入的值設定為這些檔案路徑或檔案。如果某些 filePaths
是相對路徑,則它們會相對於目前的工作目錄解析。對於空陣列,清除選取的檔案。
此方法預期 selector 指向 input 元素。但是,如果元素位於具有關聯控制項的 <label>
元素內,則會改為以該控制項為目標。
用法
frame.set_input_files(selector, files)
frame.set_input_files(selector, files, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
files
聯集 (Union)[字串 (str), pathlib.Path] | 列表 (List)[聯集 (Union)[字串 (str), pathlib.Path]] | 字典 (Dict) | 列表 (List)[字典 (Dict)]#-
name
字串 (str)檔案名稱
-
mimeType
字串 (str)檔案類型
-
buffer
位元組 (bytes)檔案內容
-
-
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
tap
在 v1.9 之前新增請改用基於定位器的 locator.tap()。閱讀更多關於定位器的資訊。
此方法透過執行以下步驟,點擊符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.touchscreen 點擊元素的中心,或指定的 position。
當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
frame.tap()
要求瀏覽器內容的 hasTouch
選項設定為 true。
用法
frame.tap(selector)
frame.tap(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
force
布林值 (bool) (選填)#是否要略過可操作性檢查。預設為
false
。 -
modifiers
列表 (List)["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (選填)#要按下的修飾鍵。確保在操作期間僅按下這些修飾鍵,然後還原目前的修飾鍵。如果未指定,則使用目前按下的修飾鍵。"ControlOrMeta" 在 Windows 和 Linux 上解析為 "Control",在 macOS 上解析為 "Meta"。
-
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定後,此方法僅執行可操作性檢查,並略過動作。預設為
false
。可用於等待直到元素準備好執行動作,而無需實際執行。請注意,鍵盤modifiers
(修飾鍵)將會被按下,無論trial
(試驗)為何,以允許測試僅在按下這些按鍵時才可見的元素。
傳回
text_content
在 v1.9 之前新增請改用基於定位器的 locator.text_content()。閱讀更多關於定位器的資訊。
傳回 element.textContent
。
用法
frame.text_content(selector)
frame.text_content(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
type
在 v1.9 之前新增在大多數情況下,您應該改用 locator.fill()。只有在頁面上有特殊的鍵盤處理時,才需要逐個按下按鍵 - 在這種情況下,請使用 locator.press_sequentially()。
為文字中的每個字元傳送 keydown
、keypress
/input
和 keyup
事件。frame.type
可用於傳送細緻的鍵盤事件。若要在表單欄位中填寫值,請使用 frame.fill()。
若要按下特殊按鍵,例如 Control
或 ArrowDown
,請使用 keyboard.press()。
用法
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
要輸入到已聚焦元素中的文字。
-
delay
浮點數 (float) (選填)#按鍵之間等待的時間,以毫秒為單位。預設為 0。
-
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
uncheck
在 v1.9 之前新增請改用基於定位器的 locator.uncheck()。閱讀更多關於定位器的資訊。
此方法透過執行以下步驟,檢查符合 selector 的元素
- 尋找符合 selector 的元素。如果沒有,則等待直到符合的元素附加到 DOM。
- 確保符合的元素是核取方塊或單選輸入。如果不是,此方法會拋出錯誤。如果元素已取消核取,此方法會立即傳回。
- 等待符合元素上的可操作性檢查,除非設定了 force 選項。如果在檢查期間元素被分離,則會重試整個動作。
- 如果需要,將元素捲動到檢視畫面中。
- 使用 page.mouse 在元素的中心點擊。
- 確保元素現在已取消核取。如果不是,此方法會拋出錯誤。
當所有組合步驟在指定的 timeout 期間未完成時,此方法會拋出 TimeoutError。傳遞零 timeout 會停用此功能。
用法
frame.uncheck(selector)
frame.uncheck(selector, **kwargs)
引數
-
用於搜尋元素的選擇器。如果有多個元素符合選擇器,將會使用第一個。
-
force
布林值 (bool) (選填)#是否要略過可操作性檢查。預設為
false
。 -
no_wait_after
布林值 (bool) (選填)#已棄用此選項沒有效果。
此選項沒有效果。
-
要使用的點,相對於元素內邊距方塊的左上角。如果未指定,則使用元素的某些可見點。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。 -
設定時,此方法只會執行可操作性檢查,並略過動作。預設為
false
。在不執行動作的情況下,等待元素準備好執行動作時很有用。
傳回
wait_for_selector
在 v1.9 之前新增請改用聲明可見性的 Web 斷言或基於定位器的 locator.wait_for()。閱讀更多關於定位器的資訊。
當 selector 指定的元素滿足 state 選項時傳回。如果等待 hidden
或 detached
,則傳回 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)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
chromium = playwright.chromium
browser = await chromium.launch()
page = await browser.new_page()
for current_url in ["https://google.com", "https://bbc.com"]:
await page.goto(current_url, wait_until="domcontentloaded")
element = await page.main_frame.wait_for_selector("img")
print("Loaded image: " + str(await element.get_attribute("src")))
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
引數
-
要查詢的 selector。
-
state
"attached" | "detached" | "visible" | "hidden" (選填)#預設為
'visible'
。可以是以下之一'attached'
- 等待元素出現在 DOM 中。'detached'
- 等待元素未出現在 DOM 中。'visible'
- 等待元素具有非空的邊界框且沒有visibility:hidden
。請注意,沒有任何內容或具有display:none
的元素具有空的邊界框,且不被視為可見。'hidden'
- 等待元素從 DOM 中分離,或具有空的邊界框或visibility:hidden
。這與'visible'
選項相反。
-
如果為 true,則呼叫需要選取器解析為單一元素。如果給定的選取器解析為多個元素,則呼叫會擲回例外狀況。
-
timeout
浮點數 (float) (選填)#最大時間 (以毫秒為單位)。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 或 page.set_default_timeout() 方法變更。
傳回
wait_for_timeout
在 v1.9 之前新增永遠不要在生產環境中等待 timeout。等待時間的測試本質上是不穩定的。請改用 Locator 動作和自動等待的 Web 斷言。
等待給定的 timeout,以毫秒為單位。
請注意,frame.waitForTimeout()
應僅用於偵錯。在生產環境中使用計時器的測試將會變得不穩定。請改用訊號,例如網路事件、selector 變為可見等等。
用法
frame.wait_for_timeout(timeout)
引數
-
timeout
浮點數 (float)#要等待的 timeout
傳回