我尝试从动态的网页中提取一些数据(js在window.onload上更改内容)。因此,单个http get请求不足以访问所需的数据。 有没有办法在不需要在窗口/标签中呈现网页的情况下执行此操作?我有300个这样的数据请求,并且不想打开300个标签。
现在我有这个:
var w = window.open(url, '_blank');
//$.get(url)
// cannot be used because the data changes dynamically after beeing loaded (via js)
var data
setTimeout(function () {
var html = w.document.documentElement
data = $("smthg", html)
w.close()
}, 500)

请注意,我需要延迟数据提取,直到"动态"内容存在。
编辑: 数据位于第三方网页上。
答案 0 :(得分:2)
我认为您尝试访问的网址位于不同的域中,因此您无法直接使用AJAX。但是,如果您有可用的服务器端脚本语言,那么您可以创建自己的代理。
例如使用php:
<?php
// proxy.php
$content = 'File not found.';
$status = 404;
if (isset($_GET['url']) {
// use curl to get the external URL and put it in a var $content
$ch = curl_init($_GET['url']);
curl_setopt(CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
// you could do some error handling here with the status code/content of the response
// as needed but we will skip all that for now
if ($content) {
$status = 200;
} else {
$content = 'Error';
$status = 500;
}
}
HttpResponse::status($status);
HttpResponse::setContentType('text/html');
HttpResponse::setData($content);
HttpResponse::send();
现在您可以简单地向proxy.php
发出ajax请求,例如:
var data;
$.get('proxy.php', {url: url}, function (html) {
data = $("smthg", html);
});
当然,如果这些网址不在不同的域上,那么您可以直接使用AJAX:
var data;
$.get(url, function (html) {
data = $("smthg", html);
});