2017-08-10 35 views
0

我想使用php-driver獲取一些截圖。而且看起來,儘管整個網頁都是拍照的,但它只是拍攝顯示器/屏幕上顯示的圖片(這就是我們稱之爲截圖的原因)。如何在php-webdriver中滾動頁面?

所以我的問題是如何捕捉位於頁面底部的圖片?我們是否將頁面滾動到指定的元素?或者有辦法拍攝整個頁面的圖片?

這是我的截圖代碼:

$host = 'http://localhost:4444/wd/hub'; // this is the default 
    $capabilities = DesiredCapabilities::firefox(); 
    $webdriver = RemoteWebDriver::create($host, $capabilities, 5000); 
    function find_image($url) { 
     //Screenshot 
     $GLOBALS["webdriver"]->get($url); 
     $element = $GLOBALS["webdriver"]->findElement(WebDriverBy::cssSelector('#law > p > img')); 
     $element_width = $element->getSize()->getWidth(); 
     $element_height = $element->getSize()->getHeight(); 
     $element_x = $element->getLocation()->getX(); 
     $element_y = $element->getLocation()->getY(); 
     $screenshot = __DIR__ . "/number/" . count($GLOBALS["data"]) . ".png"; 
     $GLOBALS["webdriver"]->takeScreenshot($screenshot); 
     $src = imagecreatefrompng($screenshot); 
     $dest = imagecreatetruecolor($element_width, $element_height); 

     imagecopy($dest, $src, 0, 0, $element_x, $element_y, $element_width, $element_height); 
     imagepng($dest, $screenshot); 
     return convert_image($screenshot); 
    } 

回答

0

就像你說的,你不能把任何事情不止是在當前屏幕上的屏幕截圖。但是,您可以將窗口滾動到頁面的底部。

$this->webDriver->executeScript('window.scrollTo(0,document.body.scrollHeight);'); 
$this->webDriver->takeScreenshot("a.png"); 

我使用一個實例變量對於webdriver的,使用GLOBALS是不使用它(IMHO)的一個特別好的方法。 您可以將它作爲變量傳遞,或者在使用類時將其用作構造函數的參數。

+0

感謝您的評論,它的工作原理。 我只知道php-driver可以執行javascript – White