将整个下拉菜单从一个站点复制到另一个站点
Copying the entire dropdown menu from one site to another
我们正在使用不允许或没有 API 的第三方网络应用程序,这个第三方应用程序基本上是一个会员注册网站,每个会员都属于一个特定的类别。
我需要在我们的内部系统中使用这些类别,到目前为止,只要在第三方应用程序中创建了新类别,我就会在表单的下拉菜单中手动添加类别。
由于无法访问 api 所以我想知道是否可以抓取下拉菜单所在的第三方应用程序并将整个下拉菜单复制到我们的内部站点。
我希望我能向您展示我迄今为止所做的努力,但我什至不知道如何开始。但是我确实在网上搜索过,但我所能找到的只是如何在同一页面上复制下拉菜单。
任何朝正确方向的推动都会很有帮助,我正在使用的技术是 PHP 和 JS
我认为 CORS 不会在这方面为您提供帮助,因为它的功能是提供一种 legal/safe 方式来跨不同域(即images/css files/web 字体),而不是 数据 。
如果没有 API 您需要的数据,您几乎肯定只能从网页中抓取数据。
您可以通过首先发出页面请求来获取 html,然后 searching/parsing 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 并找到菜单的逻辑。
无论哪种方式,都应该可以实现 - 请记住,第三方应用程序不受您的控制,因此可能会受到破坏程序的更改。
最新更新:
在值的检索中添加,我们使用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>";
}
?>
我们正在使用不允许或没有 API 的第三方网络应用程序,这个第三方应用程序基本上是一个会员注册网站,每个会员都属于一个特定的类别。
我需要在我们的内部系统中使用这些类别,到目前为止,只要在第三方应用程序中创建了新类别,我就会在表单的下拉菜单中手动添加类别。
由于无法访问 api 所以我想知道是否可以抓取下拉菜单所在的第三方应用程序并将整个下拉菜单复制到我们的内部站点。
我希望我能向您展示我迄今为止所做的努力,但我什至不知道如何开始。但是我确实在网上搜索过,但我所能找到的只是如何在同一页面上复制下拉菜单。
任何朝正确方向的推动都会很有帮助,我正在使用的技术是 PHP 和 JS
我认为 CORS 不会在这方面为您提供帮助,因为它的功能是提供一种 legal/safe 方式来跨不同域(即images/css files/web 字体),而不是 数据 。
如果没有 API 您需要的数据,您几乎肯定只能从网页中抓取数据。 您可以通过首先发出页面请求来获取 html,然后 searching/parsing 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 并找到菜单的逻辑。
无论哪种方式,都应该可以实现 - 请记住,第三方应用程序不受您的控制,因此可能会受到破坏程序的更改。
最新更新:
在值的检索中添加,我们使用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>";
}
?>