Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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未完全加载youtube上的页面_Javascript_Java_Html_Youtube_Htmlunit - Fatal编程技术网

Javascript HtmlUnit未完全加载youtube上的页面

Javascript HtmlUnit未完全加载youtube上的页面,javascript,java,html,youtube,htmlunit,Javascript,Java,Html,Youtube,Htmlunit,我的程序正在输入一个youtube视频链接,并试图获取评论框。我知道如何获取它,但当我尝试访问包含它的div时,它显示为加载div,因此我假设页面未完全加载。我尝试了这些解决方案,但没有一个奏效: while(pagina.getFirstByXPath("//div[@id='comment-section-renderer']/div") .toString().contains("loading")) { synchronize

我的程序正在输入一个youtube视频链接,并试图获取评论框。我知道如何获取它,但当我尝试访问包含它的div时,它显示为加载div,因此我假设页面未完全加载。我尝试了这些解决方案,但没有一个奏效:

while(pagina.getFirstByXPath("//div[@id='comment-section-renderer']/div")
                           .toString().contains("loading")) {
    synchronized(pagina) {
        pagina.wait(2000);
    }
}
另一方面:

 cliente.waitForBackgroundJavaScript(100000);
页面从gmail登录加载,我检查了用户在加载视频页面时是否成功登录

下面是该方法的代码

public HtmlPage comentaVideo(String correo, String pass, String video, 
                             String comentario) throws ... {

    String url= "https://www.youtube.com"+video;
    HtmlPage pagina;
    HtmlDivision division;
    HtmlButton boton;
    HtmlTextInput input;

    pagina = cliente.getPage("https://www.youtube.com/watch?v=E2b9PiqobWg");

    boton = pagina.getFirstByXPath("//div[@id='yt-masthead-signin']/div/button"); 
    //press sign in button
    pagina = boton.click();

    pagina=iniciaSesion(correo,pass,pagina); //Login gmail (working)        

    System.out.println(pagina.getUrl().toString()); //just for debug

    //Trying to get the coment box div
    division = pagina.getFirstByXPath("//div[@id='comment-section-renderer']/div"); 

    //verifying that the div is correct
    System.out.println(division.toString()); 

    //some tests...
    pagina=division.click();

    boton= pagina.getFirstByXPath("//div[@id='comment-simplebox']/div/button[2]");
    pagina=boton.click();

    return pagina;

}
现在我意识到了这个问题,这是更新的方法,仍然不起作用

public HtmlPage comentaVideo(String correo, String pass, String video, String comentario) throws FailingHttpStatusCodeException, MalformedURLException, IOException, ErrorSesionNoIniciada, InterruptedException{

        String url= "https://www.youtube.com"+video;
        HtmlPage pagina;
        HtmlDivision division;
        HtmlButton boton;
        HtmlTextInput input;

        pagina = cliente.getPage("https://www.youtube.com/watch?v=E2b9PiqobWg");

        boton = pagina.getFirstByXPath("//div[@id='yt-masthead-signin']/div/button");
        pagina = boton.click();

        pagina=iniciaSesion(correo,pass,pagina);        

        System.out.println(pagina.getUrl().toString());


        //Parte no funcional

        division = pagina.getFirstByXPath("//div[@id='comment-section-renderer']/div"); 


        boton = division.getFirstByXPath("//div[@id='comment-section-renderer']/div[2]/button"); //best comments button

    while(boton == null){ //while this button is not loaded
        ScriptResult sr=pagina.executeJavaScript("window.scrollBy(0,60000)");
        cliente.waitForBackgroundJavaScript(1000);
        pagina=(HtmlPage)sr.getNewPage();
        boton = division.getFirstByXPath("//div[@id='comment-section-renderer']/div[2]/button"); 
    }
    System.out.println(boton.toString());



        //just for testing
        division = pagina.getFirstByXPath("//div[@id='comment-section-renderer']/div"); 

        System.out.println(division.toString());
        pagina=division.click();


        boton= pagina.getFirstByXPath("//div[@id='comment-simplebox']/div/button[2]");
        pagina=boton.click();

        return pagina;
我还尝试将内页高度设置为最大大小。 (代码有未使用的var和throws,因为这只是为了测试,当我得到解决方案时,我将用最终版本更新它)


编辑1:更改了WHILE循环条件,仍然不起作用查看youtube页面结构,似乎加载注释部分的ajax只有在向下滚动页面时才会触发,直到在页面中可见为止。您可能希望首先尝试模拟滚动,然后依靠等待“加载”字符串从容器div的内部html中消失的循环

也认为这种行为在发布更新时可能会很快改变。

编辑:


在使用chrome inspector检查之后,似乎有更多的div元素包含“loading”(sub)字符串,即使在注释部分通过ajax填充之后也是如此。我建议修改您的条件,以显示一个新的预期字符串,而不是“加载”。例如,您可以搜索“热门评论”(按钮文本)或“添加公共评论…”(评论发布文本区域的占位符)。

查看youtube页面,似乎只有当您向下滚动以使其在页面中可见时,才会触发加载评论部分的ajax。您可能希望尝试模拟滚动@ᴳᵁᴵᴰᴼ 哇,谢谢你,伙计,我没想过,非常感谢你!。如果你不介意,你能回答这个问题吗?如何编辑可编辑的文件;关于用htmlunit填充div的另一个问题,我想最好创建一个新的。(欢迎来到stackoverflow)@ᴳᵁᴵᴰᴼ 现在我被滚动部分卡住了,我尝试了executeJavaScript scrolling方法和fireEvent(“滚动”),甚至更改了实际页面的最大大小,我还尝试使用waitForJavaScript(6000)将所有这些方法放在while循环中,这些都不管用。。。如果你有任何解决方案…我会在以后调查,如果你仍然有问题,我现在无法访问youtube;我会尝试这个(将内部高度设置为最大尺寸):同时