有没有办法从带有javascript帖子渲染的页面中检索完全呈现的html?如果我使用curl,它只是检索基本html,但缺少iframes的后期呈现,javascript处理等。
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
没有其他人回答(除了上面的副本,但我稍后会谈到)我会尽可能地帮助你。
没有“简单”的答案。 PHP无法本机处理javascript /导航DOM,所以你需要一些可以的东西。
我看到你的选择:
如果您正在使用屏幕抓取(这是我希望您也希望加载Flash),我建议您使用其中一个商业API来执行此操作。您可以在此列表中找到一些http://www.programmableweb.com/apitag/?q=thumbnail,例如http://www.programmableweb.com/api/convertapi-web2image
否则,您需要自己运行一些可以处理Javascript以及服务器上的DOM或连接到您的服务器的DOM。为此,您需要一个自动浏览器,您可以运行服务器端并获取所需的信息。按照上面Bergi评论中的列表,您需要测试一个合适的解决方案 - 主要的一个Selinium非常适合在已知网站上进行“单元测试”,但我不确定如何编写它来处理随机例如,网站。正如您(可能)只有一个“自动浏览器”并且您不知道每个页面加载需要多长时间,您需要对请求进行排队并一次处理一个。你还需要确保弹出警报()被处理,所有第三方库(你说你想要闪存?!)安装,处理重定向,超时和潜在的内存(如果不停地运行,你我会定期想要杀死你的浏览器并重新启动它以清理内存!)。还可以处理病毒攻击,弹出窗口以及完全关闭浏览器的请求。
第三,VB有一个Web浏览器组件。很久以前我用它来做一个类似的东西,但在一个已知的网站上。是否有可能使用.NET(对我来说,这是一个巨大的安全风险),以及你如何编程未知数(例如弹出窗口和Flash)我不知道。但是,如果你是一个充满冒险精神的.NET开发人员可能会提出更多建议。
总之 - 如果你想要的不仅仅是屏幕抓取而且可以选择选项1,祝你好运;)
答案 1 :(得分:1)
如果您正在寻找没有GUI的脚本,您可以使用无头浏览器。我使用PhantomJS来完成类似的任务。
答案 2 :(得分:0)
如果仍然有意义,我发现实现此目的的简单方法是将PhantomJs作为服务使用。
public string GetPagePhantomJs(string url)
{
using (var client = new System.Net.Http.HttpClient())
{
client.DefaultRequestHeaders.ExpectContinue = false;
var pageRequestJson = new System.Net.Http.StringContent(@"{'url':'" + url + "','renderType':'plainText','outputAsJson':false }");
var response = client.PostAsync("https://PhantomJsCloud.com/api/browser/v2/SECRET_KEY/", pageRequestJson).Result;
return response.Content.ReadAsStringAsync().Result;
}
}
这真的很简单,订阅该服务时有一个免费计划,每天允许500页。 SECRET_KEY将替换为您自己的密钥。
答案 3 :(得分:-1)
curl [-u login:pass] http://www.a_page.com | w3m -T text/html -dump
或
curl [-u login:pass] http://www.a_page.com | lynx -stdin -dump
答案 4 :(得分:-2)
查看此命令行IECapt.exe
答案 5 :(得分:-2)
它没有javascript支持,但在我需要从网页处理数据的情况下,lynx
对我很有用。这样我就得到了(明文)渲染,并且不必像curl
那样过滤原始的html标签。
lynx -nonumbers -dump -width=9999999 ${url} | grep ... et cetera.