selenium 如何取得 canvas element

作者: m87dd05 (八八里阿巴)   2019-03-15 15:11:24
最近在嘗試爬蟲以及用selenium對網頁做一些自動化的練習
發現只要是HTML5 的網頁遊戲幾乎都無法直接用開發者工具(chrome F12)的element去選
到我要的物件
例如這個遊戲:
http://www.relfind.com/game/magician.html
進去之後的score得分是動態顯示的
還有開始按鈕感覺也是個物件
但用element去選會是選到一整個畫布
查資料後我的理解(推測)是 canvas會把所有元件(例如按鈕、分數)綁在一起視為一張圖
片,
所以無法直接使用開發者工具的element去選取(去選的話也只是選到這張大畫布)
目前查到感覺可行的解法是用selenium action去模擬滑鼠的行為
把滑鼠移到按鈕的座標上去做點擊
但這樣如果我想取到遊戲的得分就還是做不到
想請問有沒有什麼辦法可以取到canvas畫布下的按鈕element呢?
或是前輩們有沒有什麼關鍵字可以提供我google
作者: rexyeah (ccccccc)   2019-03-15 15:56:00
直接fire JS event就可以了 不用真的去點按鈕我看他的game.js很淺顯易懂,你可以試試看
作者: m87dd05 (八八里阿巴)   2019-03-15 17:03:00
請問fire 是指自己去爬程式碼嗎?如果是的話遇到特意醜化隱藏code的情境下是不是就也行不通了?會有這樣的疑問是想說假使今天想爬一個網站,用find all或get element之類的去爬全部程式碼找出我要的東西,通常我會先用開發者工具選出我要的element但若遇到這類型的網頁就行不通了
作者: rexyeah (ccccccc)   2019-03-15 17:29:00
那是畫布,button 不是掛在DOM tree上,是畫出來的一張圖,並不是對elements 觸發事件 你看他的js是認座標,另外其實爬蟲真的case by case. 去研究作者的寫法爬他的code,然後成功抓到你要的資訊,我覺得相當有趣啊。
作者: m87dd05 (八八里阿巴)   2019-03-15 17:58:00
好的感謝r大,我再來細細研究看看

Links booklink

Contact Us: admin [ a t ] ucptt.com