我正在尝试构建Google查询字符串,向该页面发出请求,抓取HTML并在Chrome扩展程序(即JavaScript)中解析它。所以我有以下代码:
var url = "https://www.google.com/search?#q=" + artist + "+" + title;
searchGoogleSampleInformation(url);
function searchGoogleSampleInformation(url)
{
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.onreadystatechange = function ()
{
if (xhr.readyState == 4)
{
return parseGoogleInformation(xhr.responseText, url);
}
}
xhr.send();
}
function parseGoogleInformation(search_results, url)
{
var link = $(".srg li.g:eq(0) .r a", search_results).attr('href');
}
parse方法只是抓取第一个搜索结果的url(不希望我最终会这样做,只是为了测试HTTP Request是否正常工作)。但该行后link
为undefined
。然后我使用alert(url)
并验证我的查询字符串是否正确构建;我将其从警报窗口复制并粘贴到另一个选项卡中,并按预期提取结果。然后我用search_results
打开了一个新窗口,它似乎是Google的常规主页,根本没有搜索。我认为问题可能是因为xhr.open
调用的异步而发生,但翻转也没有帮助。我错过了一些明显的东西吗?
答案 0 :(得分:2)
这是因为"https://www.google.com/search?#q=" + artist + "+" + title
最初在内容中没有搜索结果。 Google最初会在没有结果的情况下呈现页面,然后通过JavaScript动态加载结果。由于您只是获取页面的HTML并对其进行处理,因此HTML中的JavaScript永远不会被执行。
答案 1 :(得分:0)
您正在进行跨域Ajax调用,默认情况下不允许这样做。除非服务器支持并传递相应的标头,否则您无法进行跨域调用。
但是,正如您所说,您正在制作Chrome扩展程序,可以在清单文件中添加一些字段:https://developer.chrome.com/extensions/xhr#requesting-permission