nodriver 是一個 web automation, webscraping, bots, 下載點:
https://github.com/ultrafunkamsterdam/nodriver
程式需求
某特定網頁裡有多筆的 table row,
每一 row 裡都有一個 button,
每一row 在遍歷的時候, 會先用 keyword 進行過濾,
針對過濾完的結果, 希望程式可以只回傳 button 的集合.
解法1
每次遍歷進行 filter 的時候, 都再使用 await 做一次 sub selector 來取得 button, 這個解法很直覺, 但是多花很多次無用的 cdp 指令傳輸, 效率大打折扣.
解法2
每次遍歷進行 filter 的時候, 不進行第二次的 sub selector, 直接回傳 table row(或是 div) 回傳整列。等程式需要點擊時, 再點擊回傳的 object 中的 element 到指定的 button (或 hyperlink).
解法3
每次遍歷進行 filter 的時候, 不進行第二次的 sub selector, 直接存取回傳的 object 中的 element 到指定的 button (或 hyperlink).
在解法1與解法2與解法3主要的差異就是第一次的 await query all selector 取得的 cached element, 是否有重覆使用, 解法2與解法3 直接存取 cached element, 所以效率會比較好。
存取 cached element 可以參考看看這一篇:
javascript shadowroot 功能測試
https://stackoverflow.max-everyday.com/2025/07/javascript-shadowroot-demo/
範例程式:
select_query = "#host"
div_host: Element = await demo_tab.query_selector(select_query)