如何在自己的网站上显示网站的主页?

时间:2018-09-30 09:37:22

标签: php ajax wget same-origin-policy php-curl

我正试图创建一个投资组合网站,以展示我作为Web开发人员的才能,并吸引一些额外的自由职业客户。为此,我想拥有一个iframe的Bootstrap轮播,以显示我以前处理过的网站的主页。

这样做的麻烦在于,外部站点严格遵守同源策略,并且缺少任何类型的CORS支持。我不再有能力更改此设置,因为我不再为维护这些站点的Web开发公司工作,所以什么是完成此任务的最佳方法(最好是PHP或AJAX,但我愿意考虑的方式)?

我尝试使用wget / cURL下载网站的本地副本,但是需要下载的混乱图像,CSS文件等不仅令人头疼,而且要花大约2分钟的时间下载。

外部页面还包含这些资源的许多相对路径,为了使它们正常工作,必须将它们设为绝对路径或指向我的资源本地副本。这已经比最初预期的要大得多,我几乎准备完全忘记整个概念。因此,我也乐于接受任何其他建议,以宣传我以前的工作并向潜在的新客户展示我的技能。 MTIA:-)

1 个答案:

答案 0 :(得分:1)

该解决方案原来是Selenium WebDriver,如@thebjorn在上面的评论中所建议。但是要使其完全正常工作是非常棘手的,因此对于将来遇到任何麻烦的人,这就是我最终实现的方法:

  1. 下载Selenium Standalone Server的最新版本(需要Java 8+),然后使用java -jar <path to downloaded jar file>selenium-server-standalone-<version number>.jar在shell / cmd窗口中运行它。
  2. 当您在上面链接的网站上时,还请获取所选编程语言的最新WebDriver语言绑定。 Selenium提供Java,C#,Ruby,Python和Javascript的绑定(通过Node.js)。有关其他语言的第三方绑定,请查看this page
  3. 将绑定文件提取到任何位置;我认为只要您认为合适就可以放在哪里,并且程序可以轻松访问该目录。
  4. 为您的系统(或上面链接的页面上的适当的其他浏览器驱动程序)获取最新的ChromeDriver可执行文件的副本,并将其位置添加到系统PATH。

    < / li>
  5. 这是最难的部分,因为每种语言(甚至每种语言中的每组绑定)都不同(如果您选择了第三方选项)。但是使用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测试框架!干杯! :-)