Php 如何显示网站';在我自己的网站上有什么主页?

Php 如何显示网站';在我自己的网站上有什么主页?,php,ajax,wget,same-origin-policy,php-curl,Php,Ajax,Wget,Same Origin Policy,Php Curl,我正试图创建一个投资组合网站,以展示我作为网络开发人员的才能,并招揽一些额外的自由职业者客户。为此,我希望有一个iFrame的引导旋转木马,显示我以前工作过的站点的主页 这样做的问题是,外部站点严格遵守同一原产地政策,同时也缺乏任何类型的CORS支持。我不再有能力改变这一点,因为我不再为维护这些网站的Web开发公司工作,所以什么是完成这项任务的最佳方式(最好是在PHP或AJAX中,但我愿意考虑任何工作方式)? 我曾尝试使用wget/cURL下载站点的本地副本,但需要下载的相关图像、CSS文件等乱

我正试图创建一个投资组合网站,以展示我作为网络开发人员的才能,并招揽一些额外的自由职业者客户。为此,我希望有一个iFrame的引导旋转木马,显示我以前工作过的站点的主页

这样做的问题是,外部站点严格遵守同一原产地政策,同时也缺乏任何类型的CORS支持。我不再有能力改变这一点,因为我不再为维护这些网站的Web开发公司工作,所以什么是完成这项任务的最佳方式(最好是在PHP或AJAX中,但我愿意考虑任何工作方式)? 我曾尝试使用wget/cURL下载站点的本地副本,但需要下载的相关图像、CSS文件等乱七八糟的内容不仅让人头疼,而且下载也需要约2分钟的时间


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

正如@thebjorn在上面的评论中所建议的,解决方案是Selenium WebDriver。但要让它完全工作起来相当棘手,因此对于将来遇到这种情况的任何人来说,我最终是如何做到这一点的:

  • 下载(需要Java 8+)的最新版本,并在shell/cmd窗口中使用
    Java-jar selenium server standalone-.jar
    运行它
  • 当您在上面链接的站点上时,还可以获取所选编程语言的最新WebDriver语言绑定。Selenium为Java、C#、Ruby、Python和Javascript(通过Node.js)提供绑定。对于其他语言的第三方绑定,请签出
  • 将绑定文件提取到任意位置;我认为把它们放在哪里并不重要,只要它对您有意义,并且您的程序很容易访问该目录
  • 获取系统的最新可执行文件(或上述链接页面中相应的其他浏览器驱动程序)的副本,并将其位置添加到系统路径中

  • 这是最困难的部分,因为它对于每种语言都是不同的,甚至可能对于每种语言中的每一组绑定都是不同的(如果您选择了第三方选项)。但在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;
    }
    
    使用Facebook\WebDriver\Remote\desired功能;
    使用Facebook\WebDriver\Remote\RemoteWebDriver;
    //如果不使用composer,请忽略此行
    需要_once('../vendor/autoload.php');
    函数getSiteSnapshot($siteUrl,$siteName){
    $snapshot=\uuuuu DIR\uuuu.“/images/$siteName.png”;
    一周$604800;
    $lastModTime=!file_exists($snapshot)?null:filemtime($snapshot);
    如果($lastModTime==null | |$lastModTimeget($siteUrl);
    $driver->takeScreenshot($snapshot);
    }
    返回$snapshot;
    }
    

  • 希望这能帮助像我这样的noob习惯使用这个非常强大的web测试框架!干杯!:-)

    你有没有考虑过一个旋转的屏幕截图,可能是其他网站的链接…?@thebjorn-Yeah刚刚开始研究URL2PN,但它非常昂贵。你知道有什么免费的选择吗?顺便说一句,谢谢你的建议:)没关系,他们实际上在自己的网站上提供了竞争对手的短名单!Selenium可以拍摄屏幕截图(这里有许多语言的示例代码,包括php),对不起,没有使用php进行任何严肃的操作。查看Python示例。(我假设您将有一个cron作业或类似作业,它在请求/响应周期之外生成图像)。