実現したい事
seleniumを使ってヘッダーが固定されているサイトのキャプチャをきれいに撮れるようにしたい
現状
環境
selenium 2.45.0
Java 1.8
Chrome 73.0.3683.103
参考サイト
現在のソース
Java
1WebDriver driver = new ChromeDriver(); 2 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 3 driver.get(baseUrl + "/sample.html"); 4 driver.switchTo().defaultContent(); 5 TakesScreenshot ts = (TakesScreenshot) new Augmenter().augment(driver); 6 7 //JS実行用のExecuter 8 JavascriptExecutor jexec = (JavascriptExecutor) driver; 9 10 //画面サイズで必要なものを取得 11 int innerH = Integer.parseInt(String.valueOf(jexec.executeScript("return window.innerHeight"))); 12 int innerW =Integer.parseInt(String.valueOf(jexec.executeScript("return window.innerWidth"))); 13 int scrollH = Integer.parseInt(String.valueOf(jexec.executeScript("return document.documentElement.scrollHeight"))); 14 15 //イメージを扱うための準備 16 BufferedImage img = new BufferedImage(innerW, scrollH, BufferedImage.TYPE_INT_ARGB); 17 Graphics g = img.getGraphics(); 18 19 //スクロールを行うかの判定 20 if(innerH>scrollH){ 21 BufferedImage imageParts = ImageIO.read(ts.getScreenshotAs(OutputType.FILE)); 22 g.drawImage(imageParts, 0, 0, null); 23 } else { 24 int scrollableH = scrollH; 25 int i = 0; 26 27 //スクロールしながらなんどもイメージを結合していく 28 while(scrollableH>innerH){ 29 BufferedImage imageParts = ImageIO.read(ts.getScreenshotAs(OutputType.FILE)); 30 g.drawImage(imageParts, 0, innerH*i, null); 31 scrollableH=scrollableH - innerH; 32 i++; 33 jexec.executeScript("window.scrollTo(0,"+innerH*i+")"); 34 } 35 36 //一番下まで行ったときは、下から埋めるように貼り付け 37 BufferedImage imageParts = ImageIO.read(ts.getScreenshotAs(OutputType.FILE)); 38 g.drawImage(imageParts, 0, scrollH - innerH, null); 39 } 40 41 ImageIO.write(img, "png", new File("c:\temp\mergeimg-"+ System.currentTimeMillis() +".png"));
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/11 04:53
2019/04/11 05:09
2019/04/11 05:23 編集
2019/04/11 10:45
2019/04/11 10:48
2019/04/12 02:31
2019/04/12 02:41 編集
2019/04/12 03:00
2019/04/12 03:03