原神之前的祈愿导入工具,一般都是读取原神LOG日志文件内的URL地址,再对祈愿历史进行导入的。
然而自从原神更新了3.0之后,米哈游已经屏蔽了这种方式,防止被第三方工具读取祈愿记录了。
米哈游为了让玩家不为自己花的钱心疼,利用了各种方式阻止我们获取自己的祈愿记录,他真的……我哭死!

然而有堵就有疏,除了使用代理模式进行HTTP拦截之外,github上已有大佬发现了新的漏洞,可以通过读取剪贴板内HTML代码的方式来获取网页源地址。
https://github.com/EnderSyth/Genshin-Wish-Export

其实这个方法的原理非常简单,Windows支持将HTML源码复制到剪贴板内,用于程序之间的文本格式兼容。然而这个方法不仅会在剪贴板内保存HTML源码,还会在数据头上保留 SourceURL 也就是网页源地址。
利用对数据头上 SourceURL 的读取,我们就可以直接获取到原神祈愿历史的网页地址了。

不过这个方式不知道还能被利用多久,米哈游只需要在 webbrowser 中禁止快捷键即可阻止玩家复制里面的HTML代码了。

下面是我写的URL导出工具,主要是用作 paimon.moe 的导入。

使用方法:
  1. 打开祈愿界面
  2. 点击一下网页,按下 Ctrl+ACtrl+C
  3. 执行此程序

你可以点击这里下载已编译好的程序:
paimon.moe.helper.exe
paimon.moe.helper.exe.7z
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Windows.Forms

Module paimon_moe_helper

    Private Function ParserClipboarUrl() As String
        If Not Clipboard.ContainsText(TextDataFormat.Html) Then
            Return Nothing
        End If

        Dim html As String = Nothing

        Using ms As MemoryStream = Clipboard.GetData("Html Format")
            ms.Position = 0
            Dim bs(ms.Length - 1) As Byte
            ms.Read(bs, 0, bs.Length)
            html = Encoding.UTF8.GetString(bs)
        End Using

        If html = Nothing Then Return Nothing

        Dim m As Match = Regex.Match(html, "^SourceURL:(.+?)$", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
        If m.Success Then
            Return m.Groups(1).Value
        Else
            Return Nothing
        End If
    End Function

    Sub Main()
        Dim alert As String = "Frist open the Genshin wish history, press Ctrl+A and Ctrl+C, then execute this program!" & vbCrLf & "首先打开原神的祈愿历史,然后按下 Ctrl+A 和 Ctrl+C,最后再打开此程序!"

        Dim url As String = ParserClipboarUrl()

        If url = Nothing Then
            Console.WriteLine(alert)
            Console.ReadLine()
        Else
            Console.WriteLine("Copy to Clipboard: " & url)
            Clipboard.SetDataObject(url, True)
            Console.ReadLine()
        End If

    End Sub

End Module