Selenium webdriver 截圖 太長截不全的問題
1、環境
selenium webdriver.net 2.46.0.0 + firefox 37.0.1 + win 8.1
2、問題
網頁截圖--如果網頁很長,無法截取全部。如 http://sports.sina.com.cn
3、原因分析
1)因為webdriver2.0 是將命令經RemoteWebDriver服務,將瀏覽器(實現相應的協議)內部命令發送到遠程(也可以是本地)瀏覽器,執行后返回執行數據! 所以就想 是不是 有Response最大值限制?搗鼓半天 無果。。
2)是不是根源出問題了?(瀏覽器截圖的時候)
google一番 發現 webdriver 截圖其實是將網頁畫到一個 “canvas”。
fxdriver.screenshot.grab = function(a) { var b = a.document, c = b.documentElement; if (!c) { throw Error("Page is not loaded yet, try later"); } var d = b.getElementById("fxdriver-screenshot-canvas"); null == d && (d = b.createElement("canvas"), d.id = "fxdriver-screenshot-canvas", d.style.display = "none", c.appendChild(d)); var e = c.scrollWidth; b.body && b.body.scrollWidth > e && (e = b.body.scrollWidth); c = c.scrollHeight; b.body && b.body.scrollHeight > c && (c = b.body.scrollHeight); 32767 <= e && (e = 32766); 32767 <= c && (c = 32766); d.width = e; d.height = c; try { var f = d.getContext("2d"); } catch (g) { throw Error("Unable to get context - " + g); } try { f.drawWindow(a, 0, 0, e, c, "rgb(255,255,255)"); } catch (h) { throw Error("Unable to draw window - " + h); } return d; };
然后又聯想到之前的8192px,發現大部分瀏覽器默認 都只可用的8192像素, 超出范圍的為空白。但是如果瀏覽器開啟GPU加速的話則沒有這個限制。
火狐瀏覽器配置方式如下:地址欄輸入about:config-> 搜索 gfx.font_rendering.directwrite.enabled -> 設置成true 就可以了
這樣截圖就可以 截全了!!
參考:
http://www.techlivez.com/2011/03/how-to-enabledisable-gpu-acceleration-in-ie-chrome-firefox/
http://segmentfault.com/q/1010000000601812