addArguments(['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage']); $capabilities = DesiredCapabilities::chrome(); $capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options); //disable javascript if $js is false if (!$js) $capabilities->setCapability('javascriptEnabled', false); $driver = null; $error = null; try { $driver = RemoteWebDriver::create($serverUrl, $capabilities, 30000, 60); $driver->get($target); //hide scroll bars $driver->executeScript('document.body.style.overflow = "hidden";'); if ($viewport) { $viewport = explode('x', $viewport); $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1])); } else { $viewport = [1024, 768]; $driver->manage()->window()->setSize(new \Facebook\WebDriver\WebDriverDimension($viewport[0], $viewport[1])); } $viewportLabel = is_array($viewport) ? implode('x', $viewport) : (string) $viewport; addToLog("$ip\tRequested $target with viewport " . $viewportLabel . " and js " . ($js ? 'enabled' : 'disabled')); // take screenshot and send to user $screenshot = $driver->takeScreenshot(); header('Content-Type: image/png'); header('Content-Length: ' . strlen($screenshot)); echo $screenshot; } catch (Exception $e) { $error = $e->getMessage(); addToLog("$ip\tRequested $target but resulted in error:\t" . $error); } finally { if ($driver instanceof \Facebook\WebDriver\Remote\RemoteWebDriver) { try { $driver->quit(); } catch (Exception $q) {} } } if ($error !== null) { header('HTTP/1.0 500 Internal Server Error'); echo 'Error: ' . $error; } break; default: echo renderTemplate('index.html.php'); break; }