手机上UC浏览器书签导出备份为HTML文件并导入到其他浏览器的方法 python实现

4 篇文章 0 订阅
2 篇文章 0 订阅


前言

由于历史惯性等原因,手机上一直使用的UC浏览器,用了这么多年。
最近觉得Via浏览器比较简洁方便,所以准备切换过去,那我最宝贵的书签肯定要迁移过去的,
但万恶的资本家不想你这么做,你要走了我的钱怎么办?
所以UC浏览器离谱的没有书签导出功能(以前有),气死我了,正好自己会Python,于是就有了这篇文章。

一、迁移方案

  1. 通过UC云的API获取到所有书签。
  2. 将书签保存为HTML格式的导出文件,方便其他浏览器导入。
登陆UC云获取到token和cookies
通过UC云的API获取到所有书签
将书签保存为HTML格式的导出文件方便其他浏览器导入

最后要变成的书签HTML文件格式如下图所示:
在这里插入图片描述
在这里插入图片描述

二、相关代码及过程

首先进入书签官网,登陆进去:
https://cloud.uc.cn/home/phone
UC书签官网
然后浏览器按F12进入开发者模式,按图点
在这里插入图片描述
然后刷新书签页面
在这里插入图片描述
随便选一个listdata,然后找到cookie和 token,将它们的值放到代码相应位置.
在这里插入图片描述

运行代码前记得换 cookie和 x-csrf-token,自己浏览器F12开发者工具找

在这里插入图片描述

在这里插入图片描述

记得换 下面代码的cookie和 x-csrf-token
记得换 cookie和 x-csrf-token
记得换 cookie和 x-csrf-token

只需简单一点代码,Github同样代码

import json,requests,time

host = f'https://cloud.uc.cn/api/bookmark/listdata'
headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5',
    'Connection': 'Keep-Alive',
    'origin': 'https://cloud.uc.cn',
    'referer': 'https://cloud.uc.cn/home/phone',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'x-csrf-token': 'okpv0j1zpChodmXpmlilE9X5',	#这里换上自己的token,登录后在浏览器开发者工具里找。
    'cookie': r"123"    #这里换上自己的cookie,登录UC云后在浏览器开发者工具里找。
}
session = requests.session()

count=0

def get_text(guid):
    global text
    global count
    for i in range(1,200):	#假设最多加载200页,有200多页书签的话改这里
        time.sleep(0.1)
        post_data={'cur_page': i, 'type': "phone", 'dir_guid': str(guid)}
        response = session.post(host, headers=headers,data=post_data).json()
        print(f'dir_guid: {guid}  cur_page:{i} ')
        if response['msg']!='ok':
            print(f"i:{i},quit{response['msg']}")
            break
        try:
            data=response['data']['list']
            print(f'i:{i}')
        except:
            print('error')
            continue
        for book in data:
            if book['is_directory']==1:	#如果是书签目录,则递归调用,相当于DFS
                print('it is a directory')
                bk=f"\t<DT><H3>{book['name']}</H3>\n\t<DL><p>\n"
                text+=bk
                get_text(book['guid'])	#这里是递归遍历目录
                text+="\t</DL><p>\n"
            else:
                bk=f"\t<DT><A HREF=\"{book['origin_url']}\">{book['title']}</A>\n"
                count=count+1
                text+=bk
        
        if not response['data']['meta']['has_last_page']:
            print(f"本页结束")
            break

with open('bookmark.html',mode='w',encoding='utf-8') as f:
    text='''<!DOCTYPE NETSCAPE-Bookmark-file-1>
			<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
			<TITLE>Bookmarks</TITLE>
			<H1>Bookmarks</H1>
			<DL><p>
			'''
    f.write(text)
    text=""
    get_text('0')
    f.write(text+'</DL><p>')
    print(f'生成书签总数 {count}')

书签文件保存在同目录的 bookmark.html
现在可以导入到其他浏览器了.

三、导入其他浏览器

在这里插入图片描述
在这里插入图片描述

总结

幸苦了一下午,完成了一件有实际意义的事,舒服了。

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
可以使用Apache POI来生成Excel文件,然后使用Spring Boot提供的`ResponseEntity`将生成的Excel文件输出到浏览器上。 以下是一个简单的示例代码: ```java @GetMapping("/export") public ResponseEntity<byte[]> exportExcel() throws IOException { // 创建一个Excel工作簿 Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); Cell headerCell1 = headerRow.createCell(0); headerCell1.setCellValue("姓名"); Cell headerCell2 = headerRow.createCell(1); headerCell2.setCellValue("年龄"); // 填充数据 Row dataRow = sheet.createRow(1); Cell dataCell1 = dataRow.createCell(0); dataCell1.setCellValue("张三"); Cell dataCell2 = dataRow.createCell(1); dataCell2.setCellValue(20); // 将Excel文件转成字节数组 ByteArrayOutputStream out = new ByteArrayOutputStream(); workbook.write(out); byte[] bytes = out.toByteArray(); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "test.xls"); // 返回响应实体 return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } ``` 在这个示例中,我们创建了一个Excel工作簿,并填充了一些数据。然后将Excel文件转成字节数组,并将其作为响应体返回给浏览器。在响应头中,我们设置了Content-Type为application/octet-stream,表示这是一个二进制流文件,而Content-Disposition则指定了文件名为test.xls,并告诉浏览器将其作为附件下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值