Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HtmlUnit加载Facebook照片_Javascript_Java_Ajax_Facebook_Htmlunit - Fatal编程技术网

Javascript HtmlUnit加载Facebook照片

Javascript HtmlUnit加载Facebook照片,javascript,java,ajax,facebook,htmlunit,Javascript,Java,Ajax,Facebook,Htmlunit,所以,我有一个项目,我需要从个人资料中获取照片 我可以导航到个人资料的照片页面,但我相信JavaScript没有加载 我目前正在使用HtmlUnit,但如果你知道另一个Java API会有帮助的话,我洗耳恭听 基本上,当我在普通浏览器中查看Facebook时,它将加载所有页面,我可以检查元素 检查时,有一个名为fbStarGrid的div和一些其他修改器。此div包含用户配置文件的所有图像 当我使用HTMLUnit时,我找不到div。我让它将整页XML打印到一个文件中,我发现div被注释掉了。我

所以,我有一个项目,我需要从个人资料中获取照片

我可以导航到个人资料的照片页面,但我相信JavaScript没有加载

我目前正在使用HtmlUnit,但如果你知道另一个Java API会有帮助的话,我洗耳恭听

基本上,当我在普通浏览器中查看Facebook时,它将加载所有页面,我可以检查元素

检查时,有一个名为fbStarGrid的div和一些其他修改器。此div包含用户配置文件的所有图像

当我使用HTMLUnit时,我找不到div。我让它将整页XML打印到一个文件中,我发现div被注释掉了。我相信这意味着Javascript从未运行过来加载内容

在浏览了很多关于SO的javascript帮助之后,我发现了一些有助于调试但似乎无法解决问题的东西

我做的第一件事是创建JavaScriptJobManager的实例。我用它来看看有多少JavaScript是不完整的。在等待了一段时间(10秒以上)后,它说还有3个JS作业未完成。经过很长一段时间(约60秒),它说有2个JS作业未完成

我不知道那些JS工作有什么问题

我在页面加载时收到一条关于application/ld+json未运行的警告,但我不相信网站的某部分与照片有关

我能做些什么来强制JS运行吗?是否有一项工作被卡住而无法继续下一项工作

我还想知道这是否是页面没有重新同步的问题

我尝试了两种与此相关的解决方案:

将AjaxController设置为NicelyResynchronizingAjaxController()

有人建议创建一个自定义控制器来强制同步

webClient.setAjaxController(new AjaxController(){
        @Override
        public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)
        {
            return true;
        }
    });
这两个似乎都不影响页面


如果这不是适合这份工作的图书馆,还有其他想法吗?我需要在linux服务器上运行无头/无欺诈。Java是首选,但我可以在必要时切换语言。

不要刮Facebook,因为他们不允许。使用API@WizKid嗯,我来看看。我认为API只适用于使用个人资料作为帐户的游戏。
webClient.setAjaxController(new AjaxController(){
        @Override
        public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)
        {
            return true;
        }
    });