我们正在使用第三方网络应用程序,该应用程序不允许或没有 API,该第三方应用程序基本上是一个成员(member)注册网站,每个成员(member)都属于一个特定类别。
我需要在我们的内部系统中使用这些类别,到目前为止,只要在第三方应用程序中创建新类别,我就会在表单的下拉菜单中手动添加该类别。
由于无法访问 API,所以我想知道是否可以抓取下拉菜单所在的第三方应用程序并将整个下拉菜单复制到我们的内部网站。
我希望我能向您展示我迄今为止所做的努力,但我不知道如何开始。不过,我确实在网上搜索过,但我所能找到的只是如何在同一页面上复制下拉菜单。
任何朝着正确方向的插入都会非常有帮助,我正在使用的技术是 PHP 和 JS
最佳答案
我认为 CORS 不会在这里为您提供帮助,因为它的功能是提供一种合法/安全的方式来跨不同域共享网络资源(即图像/css 文件/网络字体) ),而不是数据。
如果没有适用于您所需数据的 API,您几乎肯定只能从网页中抓取数据。 您可以通过首先向页面发出请求来获取 html,然后搜索/解析 html 以查找下拉菜单,最后解析菜单项以获取可用于您自己的下拉菜单的列表来完成此操作。下来。
所以,一些提示:
获取页面html - 参见PHP: how can I load the content of a web page into a variable?
解析 html - 请参阅 PHP Parse HTML code
当然,这最终有多容易取决于许多因素,例如
- 您是否可以只请求包含下拉列表的页面,或者 网络应用程序需要身份验证吗?您可能需要细化curl请求 视情况而定。
- 您能否轻松识别 html 下拉列表,例如
使用唯一的 id 标签。如果是这样,你可以使用
DOMDocument::getElementById
,否则你可能需要更复杂的 解析页面 html 并查找菜单的逻辑。
无论哪种方式,都应该可以实现 - 只需记住第三方应用程序不受您的控制,因此可能会发生破坏您的程序的更改。
<小时/>最新更新:
添加了值检索,并且我们使用内部错误隐藏了解析警告。
这是一个简单的 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>";
}
?>
关于javascript - 将整个下拉菜单从一个站点复制到另一个站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328377/