我正试图创建一个投资组合网站,以展示我作为Web开发人员的才能,并吸引一些额外的自由职业客户。为此,我想拥有一个iframe的Bootstrap轮播,以显示我以前处理过的网站的主页。
这样做的麻烦在于,外部站点严格遵守同源策略,并且缺少任何类型的CORS支持。我不再有能力更改此设置,因为我不再为维护这些站点的Web开发公司工作,所以什么是完成此任务的最佳方法(最好是PHP或AJAX,但我愿意考虑的方式)?
我尝试使用wget / cURL下载网站的本地副本,但是需要下载的混乱图像,CSS文件等不仅令人头疼,而且要花大约2分钟的时间下载。
外部页面还包含这些资源的许多相对路径,为了使它们正常工作,必须将它们设为绝对路径或指向我的资源本地副本。这已经比最初预期的要大得多,我几乎准备完全忘记整个概念。因此,我也乐于接受任何其他建议,以宣传我以前的工作并向潜在的新客户展示我的技能。 MTIA:-)
答案 0 :(得分:1)
该解决方案原来是Selenium WebDriver,如@thebjorn在上面的评论中所建议。但是要使其完全正常工作是非常棘手的,因此对于将来遇到任何麻烦的人,这就是我最终实现的方法:
java -jar <path to downloaded jar file>selenium-server-standalone-<version number>.jar
在shell / cmd窗口中运行它。为您的系统(或上面链接的页面上的适当的其他浏览器驱动程序)获取最新的ChromeDriver可执行文件的副本,并将其位置添加到系统PATH。
< / li>这是最难的部分,因为每种语言(甚至每种语言中的每组绑定)都不同(如果您选择了第三方选项)。但是使用Facebook WebDriver绑定在PHP中对我有用的代码是:
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;
}
希望这可以帮助另一个像我这样的菜鸟习惯使用这个非常强大的Web测试框架!干杯! :-)