将整个下拉菜单从一个站点复制到另一个站点


Copying the entire dropdown menu from one site to another

我们正在使用一个不允许或还没有API的第三方web应用程序,这个第三方应用程序基本上是一个会员注册网站,每个成员属于一个特定的类别。

我需要在我们的内部系统中使用这些类别,到目前为止,我一直在表单的下拉菜单中手动添加类别,只要在第三方应用程序中创建一个新类别。

由于没有访问api,所以我想知道是否有可能抓取下拉菜单所在的第三方应用程序,并将整个下拉菜单复制到我们的内部网站。

我希望我能向你展示我所做的努力到目前为止,但我被困在如何开始这个。然而,我确实在网上搜索了一下,但我能找到的只是如何在同一页面上复制下拉列表。

任何向正确方向的推动都会很有帮助,我正在使用的技术是PHP和JS

我不认为CORS会在这里帮助你,因为它的功能是提供一种合法/安全的方式来共享web 资源跨不同的域(即图像/css文件/web字体),而不是数据

如果没有你需要的数据的API,你几乎肯定仅限于从网页中抓取数据。您可以这样做:首先向页面发出请求以获取html,然后搜索/解析html以找到下拉菜单,最后解析菜单项以获得一个可以用于您自己的下拉菜单的列表。

那么,一些指针:

获取页面html -参见PHP:如何将网页的内容加载到变量中?

解析html -参见PHP解析html代码

当然,这最终有多容易取决于许多因素,例如

  • 您可以直接请求包含下拉菜单的页面吗Web应用程序需要身份验证吗?您可能需要改进curl请求适当。
  • 你能很容易地识别html下拉列表吗?使用唯一的id标签。如果是,你可以使用DOMDocument::getElementById,否则你可能需要更复杂的

无论哪种方式,都应该是可能实现的-只要记住第三方应用程序不在您的控制之下,因此可能会受到破坏您的程序的更改。


最新更新:

添加值检索功能,并使用internal_errors隐藏解析警告

下面是一个简单的PHP脚本,它将打印出每个下拉选项的文本和值:
    <?php
    libxml_use_internal_errors(true);
    $html = file_get_contents('http://example.com/');
    $domdoc = new DomDocument;
    $domdoc->loadHTML($html);
    libxml_clear_errors();
    $menu = $domdoc->getElementById('tid');
    $options = $menu->childNodes;
    foreach ($options as $option) {
        echo($option->nodeValue)." - ".$option->getAttribute('value')."<br>";
    }
    ?>