Playwright 提供了大量的 API 用于與頁面元素交互,但是在某些場景下還是不能完全滿足要求。比如我們需要獲得包括元素本身的 HTML,但是目前只有下列 API :
InnerHTMLAsync 返回元素內的 HTML 內容
InnerTextAsync 返回元素內的文本內容
而使用 JavaScript 執行element.outerHTML
是可以獲取到包括元素本身的 HTML的:
EvaluateAsync
Page.EvaluateAsync(expression, arg)
API 可以在網頁的上下文中運行 JavaScript 函數,并將結果帶回 Playwright 環境:
var?outerHTML?=?await?page.EvaluateAsync<string>("document.getElementById(\"kw\").outerHTML");
arg
參數可以是任何可序列化值:
//基礎類型
await?page.EvaluateAsync<int>("num=>?num+1",1);//數組
var?result?=?await?page.EvaluateAsync<int>("array=>?array.length",?new[]?{?1,2,3?});//對象
await?page.EvaluateAsync<int>("o=>?o.A+o.B",?new??{?A=1,B=2?});
我們還可以直接使用 JavaScript 函數操作元素,比如Click
。雖然 Playwright API 提供了ClickAsync
方法模擬鼠標點擊,但是存在一定限制條件,例如元素需要可見且可操作。
如果元素被隱藏了。我們可以走捷徑,使用 click 函數強制點擊。比如點擊百度首頁中“更多"鏈接下的“翻譯”鏈接:
//await?page.Locator("//*[@id=\"s-top-more\"]/div[1]/a[1]").ClickAsync();//上面的代碼無法執行,因為“翻譯”鏈接處于隱藏狀態
await?page.EvaluateAsync("document.getElementsByName('tj_fanyi')[0].click()");
添加微信號【MyIO666】,邀你加入技術交流群