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

标签 jxbrowser

我在 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 的工作委托(delegate)给 Chromium 引擎。Chromium 决定如何从 Web 服务器下载 cookie、从 HTTP header 中提取它们并将它们存储在本地文件系统(持久 cookie)或内存中( session 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 将在用户的临时文件夹中创建并使用临时目录。

仅供引用:以防万一,我也会在 Cookie 指南中提及此信息。

关于jxbrowser - 如何配置 JxBrowser 自动保留 cookie 并自动使用它们登录站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64148757/

相关文章:

java - 使用 List<Element> 的方法中的 "Unexpected Return Value"

java - JxBrowser:发送消息失败。 channel 已经关闭

java - jxbrowser中获取异常无法获取浏览器浏览器 channel

java - JX-Browserview重叠系统现有内容

java - 在哪里查看哪个 JXBrowser 和 Selenium 匹配的版本?

java - JxBrowser 6 在 osx el capitan 中挂起

JavaFx WebView 和 JxBrowser 替代方案

javascript - JxBrowser onScriptContextCreated 未被调用

java - JxBrowser相关

java - 如何在JXBrowser 4.1中使用网络摄像头界面