Я пытаюсь получить скриншот с помощью php-драйвера. И кажется, что, несмотря на то, что он делает снимок всей веб-страницы, он просто делает снимок, который появляется на мониторе / экране (вот почему мы называем это скриншотом).
Итак, мой вопрос, как сделать снимок, который находится внизу страницы? Прокручиваем ли мы страницу до указанного элемента? или есть способ сфотографировать всю страницу?
Это мой код скриншота:
$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);
}
Как вы говорите, вы не можете сделать скриншот чего-то большего, чем на текущем экране. Но вы можете прокрутить окно до конца страницы.
$this->webDriver->executeScript('window.scrollTo(0,document.body.scrollHeight);');
$this->webDriver->takeScreenshot("a.png");
Я использую переменную экземпляра для webDriver, используя GLOBALS
не очень хороший способ его использования (ИМХО).
Вы можете передать его как переменную или использовать его в качестве параметра для конструктора, если используете класс.
Других решений пока нет …