开发者社区 问答 正文

想用javascript jquery html获取谷歌搜的内容

我正在创建一个chrome扩展,我们只能使用基于浏览器的技术,如HTML, javascript, jquery

我需要代码来获取谷歌结果,我试着用这个:

<script>
        $("#mydiv")
            .html('<object data="www.google.com"/>');
</script>


这并不是谷歌搜索其他网站的结果。请建议我如何获取结果,我的目的是,如果用户点击我的chrome扩展,我会传递一个关键字,并想从谷歌获得结果。

展开
收起
sossssss 2019-11-28 17:13:53 549 分享 版权
阿里云 AI 助理回答

为了实现您的需求,您可以通过Chrome扩展直接在用户点击扩展时触发JavaScript代码来获取谷歌搜索结果。以下是一个简化的步骤和示例代码,帮助您完成这一任务:

步骤概述

  1. 清单文件(manifest.json)配置:首先,确保您的Chrome扩展清单文件中声明了必要的权限,比如访问activeTab和webNavigation API。

  2. 内容脚本注入:当用户点击扩展图标时,通过chrome.tabs.executeScript方法向当前活动的网页注入一个内容脚本。

  3. 执行搜索并解析结果:在内容脚本中,模拟用户搜索行为,发送请求到Google搜索页面,并解析返回的HTML以提取搜索结果。

示例代码

manifest.json

{
  "manifest_version": 2,
  "name": "Google Search Extension",
  "version": "1.0",
  
  "permissions": [
    "activeTab",
    "webNavigation"
  ],
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}

popup.html

<!DOCTYPE html>
<html>
<head>
  <script src="popup.js"></script>
</head>
<body>
  <button id="searchBtn">点击搜索关键词</button>
</body>
</html>

popup.js

document.getElementById('searchBtn').addEventListener('click', function() {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {action: 'search', keyword: '您的关键词'}, function(response) {
      console.log(response);
    });
  });
});

content.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === 'search') {
    const keyword = request.keyword;
    fetch(`https://www.google.com/search?q=${encodeURIComponent(keyword)}`)
      .then(response => response.text())
      .then(html => {
        // 这里可以使用DOM解析库如cheerio简化HTML处理,或者直接用正则表达式提取数据
        // 以下为简化示例,实际应用中需要更复杂的逻辑来准确提取搜索结果
        const resultsRegex = /<h3 class="LC20lb DKV0Md">(.*?)<\/h3>/g;
        let matches;
        const results = [];
        while ((matches = resultsRegex.exec(html)) !== null) {
          results.push(matches[1]);
        }
        sendResponse({results});
      })
      .catch(error => sendResponse({error: error.message}));
    return true; // 必须返回true以支持异步消息响应
  }
});

注意事项

  • 上述代码仅为示例,实际部署前需进一步完善错误处理、安全性考虑(如跨域问题、用户隐私保护)及性能优化。
  • 使用fetch请求外部资源时,由于同源策略限制,直接从客户端发起请求可能遇到CORS问题。在生产环境中,您可能需要后端服务器作为代理来转发请求。
  • 提取搜索结果的正则表达式非常基础且不稳定,因为Google的HTML结构可能会变化。推荐使用DOM解析库(如Cheerio,在Node.js环境下)进行更稳定的数据提取。

请根据实际情况调整和完善上述代码,确保符合Chrome扩展的开发规范及您的具体需求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答