3

我正在尝试解析一个网页,其中包含一些 JS。到目前为止,我一直Jsoup在用 Java 解析 html,它按预期工作。但我无法解析 JavaScript。以下是 HTML 页面的片段 -

<script type="text/javascript"> 
var element = document.createElement("input"); 
element.setAttribute("type", "hidden");
element.setAttribute("value", "");
element.setAttribute("name", "AzPwXPs");
element.setAttribute("id", "AzPwXPs");
var foo = document.getElementById("dnipb"); 
foo.appendChild(element);
var element1 = document.createElement("input"); 
element1.setAttribute("type", "hidden");
element1.setAttribute("value", "6D6AB8AECC9B28235F1DE39D879537E1");
element1.setAttribute("name", "ZLZWNK");
element1.setAttribute("id", "ZLZWNK");
foo.appendChild(element1);
</script>

我想用name/读取这两个值id。这样解析后我可以得到以下结果-

AzPwXPs=
ZLZWNK=6D6AB8AECC9B28235F1DE39D879537E1

在这种情况下如何解析?

4

5 回答 5

6

在搜索使用 JavaScript 解析页面的解决方案时,我几次偶然发现了这个问题,但提供的解决方案并不完美。通过使用JBrowserDriverJSoup来解析 JavaScript 操作页面,我找到了纯 Java 解决方案。

简单的例子:

    // JBrowserDriver part
    JBrowserDriver driver = new JBrowserDriver(Settings
            .builder().
            timezone(Timezone.EUROPE_ATHENS).build());
    driver.get(FETCH_URL);
    String loadedPage = driver.getPageSource();

    // JSoup parsing part
    Document document = Jsoup.parse(loadedPage);
    Elements elements = document.select("#nav-console span.data");

    log.info("Found element count: {}", elements.size());

    driver.quit();
于 2017-03-02T08:25:37.620 回答
2

我已经遇到了在 css 文件中查找 url 的相同情况。

将javascript放在一个字符串中并应用正则表达式

Pattern p = Pattern.compile("url\\(\\s*(['" + '"' + "]?+)(.*?)\\1\\s*\\)"); //expression
Matcher m = p.matcher(content);
while (m.find()) {
String urlFound = m.group(); 
}

问候,雨果佩德罗萨

于 2013-05-02T16:07:13.800 回答
1

<script>从 JSoup获得元素的文本内容后,您可以使用Caja JS 解析器解析 JS ,然后遍历解析树以查找您要查找的内容。

于 2013-05-02T16:15:00.900 回答
1

Selenium 的 Webdriver 很棒: http ://docs.seleniumhq.org/docs/03_webdriver.jsp

有关您尝试执行的操作的示例,请参阅此答案: Using Selenium Web Driver to retrieve value of a HTML input

于 2013-05-02T16:11:46.903 回答
1

您可以尝试使用查询库。它更容易使用它。

于 2013-05-02T15:54:00.847 回答