如何配置JxBrowser自动保留cookie并自动使用它们登录网站?

问题描述

我在Mac中使用JxBrowser v7.10,在持久保存它们时存在一些cookie问题,并在应用程序重新启动时自动使用它们自动登录网站。 Cookie似乎无法以某种方式持久。

我搜索并阅读了其中的文档 https://jxbrowser-support.teamdev.com/docs/guides/cookies.html#working-with-cookies https://jxbrowser-support.teamdev.com/javadoc/7.2/com/teamdev/jxbrowser/cookie/CookieStore.html

,但找不到如何使用cookie。

医生提到 “ JxBrowser将使用cookie的工作委托给Chromium引擎。Chromium决定如何从Web服务器下载cookie,如何从HTTP标头中提取cookie并将它们存储在本地文件系统(持久cookie)或内存(会话cookie)中。 “

因此,从这种理解出发,cookie应该是自动持久的,并且能够在应用程序重新启动时使用它们,但我需要在每次应用程序重新启动时重新登录。

以下是测试代码。我应该能够登录gmail,并且jxbrowser会自动保留cookie(无需编码)并在重启时自动登录gmail,但是以下代码无法做到这一点。

要实现该目标,我需要做些什么吗?

import com.teamdev.jxbrowser.browser.Browser;
import com.teamdev.jxbrowser.engine.Engine;
import com.teamdev.jxbrowser.engine.EngineOptions;
import com.teamdev.jxbrowser.view.swing.BrowserView;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import static com.teamdev.jxbrowser.engine.RenderingMode.HARDWARE_ACCELERATED;

public final class CookieBrowser {

  public static void main(String[] args) {

    // Creating and running Chromium engine
    final Engine engine = Engine.newInstance(
      EngineOptions.newBuilder(HARDWARE_ACCELERATED).build());

    Browser browser = engine.newBrowser();
    // Loading the required web page
    browser.navigation().loadUrl("www.gmail.com");

    // No cookie printed out,why ?
    engine.cookieStore().cookies().forEach(System.out::println);

    SwingUtilities.invokeLater(() -> {
      // Creating Swing component for rendering web content
      // loaded in the given Browser instance
      BrowserView view = BrowserView.newInstance(browser);

      // Creating and displaying Swing app frame
      JFrame frame = new JFrame("JxBrowser AWT/Swing");
      // Closing the engine when app frame is about to close
      frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
          System.out.println("Cookie persist"); // but unable to use them automatically on restart
          engine.cookieStore().persist();
          engine.close();
        }
      });

      frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      frame.add(view,BorderLayout.CENTER);
      frame.setSize(800,600);
      frame.setVisible(true);
    });
  }
}`enter code here`

解决方法

之所以会出现这种现象,是因为您没有使用用户数据目录配置Engine实例。因此,每次创建一个新的Engine实例时,都会创建一个临时目录,并在此初始化cookie存储。结果,所有先前创建的cookie将不再可用。

请访问https://jxbrowser-support.teamdev.com/docs/guides/engine.html#user-data-directory

中的指南

该指南中的

用户数据目录

表示目录的绝对路径,在该目录中将存储诸如高速缓存,cookie,历史记录,GPU高速缓存,本地存储,访问的链接,Web数据,拼写检查字典文件等数据。例如:

Engine engine = Engine.newInstance(EngineOptions.newBuilder(...)
        .userDataDir(Paths.get("/Users/Me/.jxbrowser"))
        .build());

如果不提供用户数据目录路径,则JxBrowser将在用户的temp文件夹中创建并使用一个temp目录。

仅供参考:以防万一,我也将在Cookies指南中提及此信息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...