How to get JSON objects embedded in the result of the JS HTML page launched by PhantomJS and pass them into java code?

I am using the JS script code described in this answer , but I do not want to save the html results page in an html file. I want to extract a Json object from <div class="rg_meta">and pass them into Java code.

In the search, I find the use of a “document”, but I get an undefined error. I am new to PhantomJS and working with JSON in Java.

var page = require('webpage').create();
var fs = require('fs');
var system = require('system');

var url = "";
var searchParameter = "";
var count=0;

if (system.args.length === 4) {
    url=system.args[1];
    searchParameter=system.args[2];
    count=system.args[3];
}

if(url==="" || searchParameter===""){
    phantom.exit();
}

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';

page.zoomFactor = 0.1;

page.viewportSize = {
  width: 1920,
  height: 1080
};

var divCount="-1";
var topPosition=0;
var unchangedCounter=0;


page.open(url, function(status) {
console.log("Status: " + status);
if(status === "success") {

    window.setInterval(function() {

        var newDivCount = page.evaluate(function() { 
            var divs = document.querySelectorAll(".rg_di.rg_bx.rg_el.ivg-i");
            return divs[divs.length-1].getAttribute("data-ri");
        });

        topPosition = topPosition + 1080;

        page.scrollPosition = {
            top: topPosition,
            left: 0
        };

        if(newDivCount===divCount){
            page.evaluate(function() {
                var elems=document.getElementByClassName("rg_meta");
                console.log(elems.length);
                var button = document.querySelector("#smb");
                if(!(typeof button === "undefined")) {
                    button.click();
                    console.log('Clicked');
                    return true;
                }else{
                    return false;
                }
            });

            if(parseInt(unchangedCounter,10) === parseInt(count,10)){
               /* var path = searchParameter+'.html';
                fs.write('seedHtml/'+path, page.content, 'w');
                console.log('printing html');*/
                phantom.exit();
            }else{
                unchangedCounter=unchangedCounter+1;
            }
        }else{
            unchangedCounter=0;
        }
        divCount = newDivCount;

    }, 500);
}else{
    phantom.exit();
}
});
+4
source share
1 answer

HTML5 Attributes

Fortunately, HTML5 introduces user data attributes.

<div id="msglist" data-user="bob" data-list-size="5" data-maxage="180"></div>

Custom data attributes:

- - , , JSON. JavaScript. , HTML5.

JavaScript Parsing # 1:

getAttribute setAttribute,

var msglist = document.getElementById("msglist");

var show = msglist.getAttribute("data-list-size");
msglist.setAttribute("data-list-size", show+3);

, .

JavaScript Parsing # 2:

1.4.3, jQuerys data() HTML5. , :

var msglist = $("#msglist");

var show = msglist.data("list-size");
msglist.data("list-size", show+3);

, !!!

0

Source: https://habr.com/ru/post/1666077/


All Articles