如何从 HTML 文件中的外部网页获取 DIV 元素?



如果之前有人问过这个问题,请提前道歉。我确实在网上发现了一些类似的问题,但我仍然无法找出答案。你可以说我从来没有处理过基本HTML以外的任何事情。因此,任何帮助将不胜感激。

我有一个HTML文件(比如文本.html(仅供个人使用。在文件中,将有一个用于输入文本的输入框和一个提交按钮。我希望如果我单击提交,它会根据输入文本从外部网页打开一个特定的超链接。我想这就像谷歌的"我感到很幸运"。

示例:如果用户输入"测试"并单击"提交",则应从页面"https://www.google.com/search?q=test"打开第二个结果

这是我的 HTML:

<!DOCTYPE html>
<html>
<body style="background-color:beige">
<h1 style="text-align:center"><font size="14">Test</font></h1>
<style type="text/css">
</style>
<form id="form">
<div align="center" style="vertical-align:bottom">
<input type="text" 
value="Test" 
id="input" 
style="height:50px;width:200px;font-size:14pt;"> 
</div>
</form>
<TABLE BORDER="0">
<TD><button class="button" id="button01">SUBMIT</button></TD>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#button01').click(function(e) {
var inputvalue = $("#input").val();
window.open("https://www.google.com/search?q="+inputvalue);
});
</script>

另外,以下是我要打开的超链接所在的页面中的div 元素的示例:

<div id="XYZ" class="contentEditValue" style="float:left;width:180px;">
<a href="2nd result link from google search" target="_self" title="2nd result">2nd Result</a>               
</div>

我已经读到它可以用PHP或Jquery来实现,但它们不是我曾经做过的事情。提前非常感谢您的任何帮助!

也欣赏任何其他选择。

由于安全性,您不应该这样做。如果可以(从iframe,其他浏览器窗口读取内容......(,攻击者可以将JS键盘记录器添加到您的网上银行登录名或在Facebook上阅读您的消息。CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS( 用于阻止这些请求,如果网站没有明确说明您可以对其内容执行某些操作,则大多数浏览器将不允许您这样做。

您缺少关闭ready()函数的});

<script type="text/javascript">
$(document).ready(function(){
$('#button01').click(function(e) {
var inputvalue = $("#input").val();
window.open("https://www.google.com/search?q="+inputvalue);
});
});
</script>

下面是如何在 PHP 中执行此操作的基本示例。

把JavaScript/JQuery排除在外,假设你有一个基本的形式:

<form>
<input type="text" value="Test" name="input">
<input type="submit">
</form>

如果不在<form>标记上指定actionmethod属性,表单将向其所在页面的 URL 发出 HTTP GET 请求,因此在本例中,PHP 代码将与表单位于同一页面上。如果您有兴趣,以下是发送表单数据的更详细说明。


现在您已经有了将输入传递给 PHP 脚本*的方法,这个问题有三个基本部分。

  1. 使用包含输入的查询字符串向所需页面发出请求

    http_build_query是构造正确编码的查询字符串以用于请求的简单方法。对于此示例,我们将使用file_get_contents发出请求。还有其他方法可以做到这一点,包括cURL,但让我们保持简单。

    $query = http_build_query(['q' => $_GET['input']]);
    $page = file_get_contents('http://www.example.com/?' . $query);
    

    在这个例子中,我没有使用 Google,因为在响应中找到正确的链接并遵循它们有点复杂。(部分原因是他们并不真的希望你这样做。

  2. 在响应中找到所需的链接

    不要尝试使用正则表达式在响应中找到链接。你会遇到问题,回到 Stack Overflow 尝试解决这些问题,人们会告诉你你不应该使用正则表达式,所以只需跳过该部分并使用 DOM 解析器。

    $doc = new DomDocument;
    $doc->loadHTML($page);
    $links = $doc->getElementsByTagName('a');
    $url = $links[0]->getAttribute('href');
    

    我用getElementsByTagName()来查找链接,但如果页面更复杂,xpath 查询会更好。另外,我使用了第一个链接($links[0](,因为它只有一个链接 example.com。 如果存在,$links[1]会得到第二个链接。

  3. 点击链接

    header("Location: $url");
    exit;
    

如果一切顺利,你最终会到达你想去的地方。但是有很多事情可能会出错。如果你请求的资源是你无法控制的,它可以随时更改,而不会向你发出任何预先警告,因此找到链接的代码可能会停止工作。您可能会被阻止提出请求。从这样的网站上抓取链接违反了许多网站的服务条款,因此请事先检查一下。您可能会发现该站点提供了一个 Web API,这应该是访问其内容的更好方式

*您实际上并不需要表单;您只需将URL中的输入参数传递到您的页面即可。

最新更新