javascript - 如何使用 JavaScript 从动态存储数据的网站获取跨度值

标签 javascript java jquery jsoup

我对此很陌生,所以有人能指出我正确的方向吗? 我有一个 JavaScript 文件,我想通过它从网站获取跨度的值。现在网站每 1 秒动态刷新一次跨度。我正在使用 Java (Eclipse) 来获取此数据。当我尝试从网站获取跨度值时,它没有给我任何值,因为跨度使用 JavaScript 来存储这些值。我已经问过这个问题,我将在下面放置一个链接。所以我想知道的是,如何使用 JSoup 动态获取这些数据。有人对我的上一篇文章发表评论说 JavaScript 可能正在查询 Web 服务并找到该代码。但我找不到代码,我不知道下一步该怎么做。

这是我最后一个问题的链接:Fetching Dynamic Website Data Using Java

以下是网站的链接,该网站将我想要的数据存储在名为“id=spot”的范围内(基本上是库存数字):https://www.binary.com/trading?l=EN

最后是该网站的 JavaScript 文件的链接,该文件具有所有功能:https://static.binary.com/js/binary.min.js?13b386b

请帮助我,因为我对此很陌生,我花了两天多的时间试图找到答案,但没有运气。 预先感谢您

------------------------------------------------------------ ---------------------------------.---------------- -----------------------------------

好的,问题的第一部分已经解决,但我现在遇到了另一个问题。我复制了这段代码,但现在收到此错误。这是我的代码:

import java.net.URI;
import java.io.IOException;
import java.lang.InterruptedException;
import javax.websocket.*;

@ClientEndpoint
public class WSClient  {

@OnOpen
public void onOpen(Session session) throws java.io.IOException
{
    session.getBasicRemote().sendText("{\"ticks\": \"R_100\"}");
}

@OnMessage
public void onMessage(String message)
{
    System.out.println("ticks update: " + message);
}

public static void main(String[] args)
    throws IOException, DeploymentException, InterruptedException
{
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    URI apiUri = URI.create("wss://ws.binaryws.com/websockets/v3");
    Session session = container.connectToServer(WSClient.class, apiUri);
    Thread.sleep(10000);
}
}

这是控制台上的错误:

Exception in thread "main" java.lang.RuntimeException: Could not find an implementation class. at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:73) at WSClient.main(WSClient.java:24)

最佳答案

该站点使用 WebSockets 从服务器检索数据以在客户端中显示:

var onLoad = function(){
        trading_page = 1;
        if(sessionStorage.getItem('currencies')){
            displayCurrencies();
        }       
        BinarySocket.init({
            onmessage: function(msg){
                Message.process(msg); //this function is updating that sppan
            },
            onclose: function(){
                processMarketUnderlying();
            }
        });
        Price.clearFormId();
        TradingEvents.init();
        Content.populate();

所以你无法用JSOUP看到下载的HTML中的数据。你需要一个像 HTML-UNIT 这样的 Java 中无 UI 的浏览器.

但首选且更合理的方法是使用 API of the site .

关于javascript - 如何使用 JavaScript 从动态存储数据的网站获取跨度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798419/

相关文章:

javascript - 使用 Javascript 从模板生成 PDF

javascript - 如何将数据从子级传递给父级 : Angular2

javascript - 单击菜单项后汉堡菜单返回 3 个链接

javascript - 如何触发childNode点击事件

java - 仅在 ExecutorService 中提交任务时设置变量值

javascript - jQuery/JavaScript 读取本地文本文件

JavaScript 服务器元素 onclick 事件

javascript - 更改大型 Bootstrap 模态的高度

java - 如何解释这种看似不一致的 Java 可变参数行为?

java - 为什么 `Class<T> == Boolean.class` 会在 `T extends Comparable<? super T>` 时导致编译器错误?