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

时间:2018-05-06 08:12:54

标签: javascript php jquery html

如果之前已经提出这个问题,请提前道歉。我确实在网上找到了一些类似的问题,但我仍然无法找到答案。你可以说我从未处理过基本HTML之外的任何事情。所以任何帮助都会受到赞赏。

我有一个HTML文件(Say 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来实现,除了它们不是我曾经做过的事情。非常感谢您提前寻求帮助!

同样感谢任何其他选择。

3 个答案:

答案 0 :(得分:1)

您遗漏了});以关闭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>

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

将JavaScript / JQuery从图片中删除,我们只是说你有一个基本形式:

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

如果未在action标记上指定method<form>属性,则表单将对其所在页面的URL发出HTTP GET请求,因此对于此示例,PHP代码将与表单位于同一页面上。 Here's a more detailed description of sending form data if you're interested.

现在你有办法将输入传递给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. 在回复中找到您想要的链接

    Don't try to find the link in the response with regex。你会遇到问题,回到Stack Overflow尝试解决它们,人们会告诉你不应该使用正则表达式,所以只需跳过那部分并use a DOM parser

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

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

  3. 点击链接

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

    *你

    您只需将URL中的输入参数传递给您的页面即可。