Я пытаюсь создать веб-сайт для портфолио, чтобы продемонстрировать свои таланты в качестве веб-разработчика и привлечь дополнительных внештатных клиентов. Для этого мне бы хотелось иметь карусель Bootstrap с фреймами, отображающими домашние страницы предыдущих сайтов, над которыми я работал.
Проблема в том, что внешние сайты строго придерживаются политики одного и того же происхождения, а также не имеют какой-либо поддержки CORS. У меня больше нет возможности изменить это, так как я больше не работаю в компании, занимающейся веб-разработкой, которая поддерживает эти сайты, так что, как лучше всего выполнить эту задачу (желательно на PHP или AJAX, но я готов рассмотреть любые как это работает)?
Я пытался использовать wget / cURL для загрузки локальных копий сайтов, но беспорядок связанных изображений, CSS-файлов и т. Д., Которые необходимо загрузить, не только требует головной боли, но также занимает ~ 2 минуты для загрузки.
Внешние страницы также содержат множество относительных путей к этим ресурсам, которые необходимо сделать абсолютными или указывать на мои локальные копии ресурсов, чтобы работать должным образом. Это стало намного более сложной задачей, чем первоначально предполагалось, и я почти готов просто забыть обо всей концепции в целом. Поэтому я также открыт для любых предложений о том, как еще я мог бы рекламировать свою предыдущую работу и показать свои навыки потенциальным новым клиентам. MTIA 🙂
Решением оказалось Selenium WebDriver, как предложено @thebjorn в комментариях выше. Хотя было довольно сложно заставить его работать в полном объеме, поэтому для любого, кто столкнется с этим в будущем, вот как я в конце концов это сделал:
java -jar <path to downloaded jar file>selenium-server-standalone-<version number>.jar
,Возьмите копию с последней ChromeDriver исполняемый файл для вашей системы (или соответствующий драйвер другого браузера из указанной выше страницы) и добавьте его местоположение в системный PATH.
Это самая сложная часть, так как она отличается для каждого языка и, возможно, даже для каждого набора привязок в каждом языке (если вы выбрали сторонний вариант). Но код, который работал для меня в PHP, используя Facebook WebDriver привязки, это:
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
// Ignore this line if you aren't using composer
require_once('../vendor/autoload.php');
function getSiteSnapshot($siteUrl, $siteName) {
$snapshot = __DIR__ . "/images/$siteName.png";
$oneWeek = 604800;
$lastModTime = !file_exists($snapshot) ? null : filemtime($snapshot);
if ($lastModTime === null || $lastModTime < time() - $oneWeek) {
$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::chrome();
$driver = RemoteWebDriver::create($host, $capabilities, 5000);
$driver->get($siteUrl);
$driver->takeScreenshot($snapshot);
}
return $snapshot;
}
Надеюсь, что это поможет другому нубу, как я, привыкнуть к использованию этого очень мощного механизма веб-тестирования! Ура! 🙂
Других решений пока нет …