繁体   English   中英

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

[英]How to get a DIV element from an external webpage in HTML file?

如果较早提出此问题,请提前道歉。 我确实在网络上找到了一些类似的问题,但是我仍然找不到答案。 可以说,我从未处理过基本HTML之外的任何内容。 因此,任何帮助将不胜感激。

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

示例:如果用户输入“测试”并单击“提交”,则应打开“ 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来实现,而所有这些都不是我从事过的工作。 预先非常感谢您的帮助!

以及其他任何替代品。

您缺少}); 关闭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>

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

这是如何在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. 在响应中找到所需的链接

    不要尝试使用regex在响应中找到链接 您将遇到问题,回到Stack Overflow尝试解决它们,然后人们会告诉您您不应该使用regex,因此只需跳过该部分并使用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中的输入参数传递给您的页面即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM