javascript jQuery .find在实时网站中不起作用

axr492tv  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(110)

我试图从一个网站获得一些dom元素,我有10个或更多的网站为这件事。我已经做了一个网站使用以下代码,但它是不工作的下一个网址。

$.get('http://www.example.com/view_video.php?viewkey=ph576bfc568f54d', function (response) {
    var thumbnail = $(response).find('meta[property="og:image"]');
    var thumbUrl = $(thumbnail).attr('content');
    console.log(thumbUrl);
});

我试过上面的代码。对于其他网站它的工作,但不是这个。
如果您想尝试,您还需要使用上面的第一个脚本。

$.ajaxPrefilter(function (options) {
    if (options.crossDomain && jQuery.support.cors) {
        var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
        options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
        //options.url = "http://cors.corsproxy.io/url=" + options.url;
    }
});

$.get('http://www.example.com/view_video.php?viewkey=ph576bfc568f54d', function (response) {
    var thumbnail = $(response).find('meta[property="og:image"]');
    var thumbUrl = $(thumbnail).attr('content');
    console.log(thumbUrl);
});
gjmwrych

gjmwrych1#

在将URL的协议部分作为参数传递给cors-anywhere.herokuapp.com之前,需要将其去除。
试试这个:

$.ajaxPrefilter(function (options) {
    if (options.crossDomain && jQuery.support.cors) {
        var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
        options.url = http + '//cors-anywhere.herokuapp.com/' + options.url.split('//')[1];
    }
});

在解析response时,我认为将整个响应解析为自己的DOM树是一种浪费资源的做法,而使用简单的字符串方法提取值可能更好。
但是,您当前的方法失败了,因为如果您传递整个响应(使用$(response)),jQuery不会为您创建DOM树。
试试这个:

$.get('http://www.example.com/view_video.php?viewkey=ph576bfc568f54d', function (response) {
    var parser = new DOMParser(),
        doc = parser.parseFromString(response, "text/html");

    console.log(doc.querySelectorAll('meta[property="og:image"]')[0].content);
});

相关问题