我们正在使用一个不允许或还没有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>";
}
?>