如何使用Python获取SAP Temporary key 临时密钥

什么是Sap 临时密钥?

SAP 临时密钥是用于激活 SAP 软件的一种许可证,只能在有限的时间内使用。这些密钥可用于评估目的或在系统迁移期间使用。它们是临时解决方案,通常在一定时间后过期。

如何获取Sap Temporary keys?

临时密钥: 如果创建永久许可证密钥时出现任何错误,SAP支持门户网站提供临时的Business Objects许可证密钥。您可以通过登录到支持门户网站上的链接 www.service.sap.com/licensekey并选择“获取临时许可证密钥”链接来下载这些密钥。这些临时许可证密钥的有效期最长为90天。

方法1:手动下载

  1. www.service.sap.com/licensekey 打开网址之后点击这里下载一个名为“bobj-temp-license-key.zip”的文件:
    在这里插入图片描述
  2. 解压之后有一名为“SAP Analytics Emergency License Key Process”的pdf文件,在这里面可以找到你需要的License Key
    在这里插入图片描述

方法2:使用Python自动化获取Sap Temporary keys的过程

导入需要的包

from selenium import webdriver
import time
import zipfile
import PyPDF2
import os
import shutil
import warnings

下载bobj-temp-license-key.zip

# 定义文件夹路径,替换成你想保存zip文件的路径
download_zip_path = r"C:\\Users\\USERNAME\\Projects\\download_zip"# 下载zip文件
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0,'download.default_directory': download_zip_path}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://support.sap.com/content/dam/support/en_us/library/ssp/my-support/keys/bobj-temp-license-key.zip')time.sleep(5)
driver.quit()

解压zip文件以获取pdf

# zip the zip file into 'bobj-temp-license-key'
file_path_zip = r"{}/bobj-temp-license-key.zip".format(download_zip_path)if os.path.exists(file_path_zip):zip_file = zipfile.ZipFile(file_path_zip)zip_file.extractall(keys_path)zip_file.close()print("解压成功")
else:print("解压失败")# 解压成功之后即可获得pdf的路径
file_path_pdf = "..."

从pdf文件中获取需要的Licence Key

以SAP BusinessObjects Tempory Licence Key为例,Licence Key位于pdf第二页的“CPU 4.2”字段之后,经过测试确定获取SAP BusinessObjects Tempory Licence Key的function:

# 获取SAP BusinessObjects Tempory Licence Key
def get_key_from_text(text):start = text.find('CPU 4.2') + 8return text[start:start + 32]

file_path_pdf为上一步中获取的pdf的路径:

if os.path.exists(file_path_pdf):pdf_file = open(file_path_pdf, 'rb')pdf_reader = PyPDF2.PdfReader(pdf_file)page = pdf_reader.pages[1]text = page.extract_text()latest_key = get_key_from_text(text)pdf_file.close()

如果每隔90天就需要更新一次license key,可以把licence key保存在一个txt文件里,成功获取最新的licence key之后可以和本地保存的licence key对比,如果latest_key != current_key,则将latest_key 替换current_key,以确保txt文件里永远保存最新的licence key。

if os.path.exists(file_path_pdf):pdf_file = open(file_path_pdf, 'rb')pdf_reader = PyPDF2.PdfReader(pdf_file)page = pdf_reader.pages[1]text = page.extract_text()latest_key = get_key_from_text(text)pdf_file.close()if latest_key != current_key:with open(current_key_txt_path, 'w') as file:file.write(latest_key)print("license已更新, latest license", latest_key)else:print("license未更新, current license:", latest_key)
else:print("PDF不存在")

完整代码

from selenium import webdriver
import time
import zipfile
import PyPDF2
import os
import shutil
import warningswarnings.filterwarnings("ignore")download_zip_path = r"C:\\Users\\USERNAME\\Projects\\download_zip" #zip文档下载到哪个文件夹
keys_path = r"C:\\Users\\USERNAME\\Projects\\bobj-temp-license-key"#zip文件解压到哪里
current_key_txt_path = r"C:\\Users\\USERNAME\\Projects\\BO_KEY.txt" #保存最新的licence的txt文件路径# 读取txt文件,定义current_key
with open(current_key_txt_path, 'r') as file:current_key = file.read()# 清空文件夹
## 清空download_zip_path和keys_path文件夹,清空之后再保存文件,方便后续读取
### 定义清空文件夹的function
def delete_folder_contents(folder_path):  for filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)try:if os.path.isfile(file_path) or os.path.islink(file_path):os.unlink(file_path)elif os.path.isdir(file_path):shutil.rmtree(file_path)except Exception as e:print(f"Failed to delete {file_path}. Reason: {e}")### 清空download_zip_path和keys_path文件夹
delete_folder_contents(download_zip_path)
delete_folder_contents(keys_path)# download the latest zip
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0,'download.default_directory': download_zip_path}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://support.sap.com/content/dam/support/en_us/library/ssp/my-support/keys/bobj-temp-license-key.zip')time.sleep(5)
driver.quit()# zip the zip file into 'bobj-temp-license-key'
file_path_zip = r"{}/bobj-temp-license-key.zip".format(download_zip_path)if os.path.exists(file_path_zip):zip_file = zipfile.ZipFile(file_path_zip)zip_file.extractall(keys_path)zip_file.close()print("zip file unzipped successfully")
else:print("zip File does not exist")time.sleep(5)file_path_pdf = r'{}\SAP Analytics Emergency License Key Process.pdf'.format(keys_path)def get_key_from_text(text):start = text.find('CPU 4.2') + 8return text[start:start + 32]if os.path.exists(file_path_pdf):pdf_file = open(file_path_pdf, 'rb')pdf_reader = PyPDF2.PdfReader(pdf_file)page = pdf_reader.pages[1]text = page.extract_text()latest_key = get_key_from_text(text)pdf_file.close()if latest_key != current_key:with open(current_key_txt_path, 'w') as file:file.write(latest_key)print("license已更新, latest license", latest_key)else:print("license未更新, current license:", latest_key)
else:print("PDF不存在")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/93578.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码)

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码) 1、时间:2011-2020(省级、城市),2014-2020(区县) 2、原始数据来源:北大金融研究中心…

【数据结构与算法——TypeScript】树结构Tree

【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? 🌲 真实的树:相信每个人对现实生活中的树都会非常熟悉 🌲 我们来看一下树有什么特点? ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…

mysql 8.0安装

操作系统:22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码,则可以进入配置文件,设置免密登录 sudo vim /etc/mysql/mysq…

探究主成分分析方法数学原理

目录 1、简介 2、实现原理 3、实现步骤 4、公式分析 5、实例分析 6、⭐协方差矩阵补充说明 7、LaTex文本 ⭐创作不易,您的一键三连,就是支持我写作的最大动力!🥹 关于代码如何实现,请看这篇文章:[机器…

Android 远程真机调研

背景 现有的安卓测试机器较少,很难满足 SDK 的兼容性测试及线上问题(特殊机型)验证,基于真机成本较高且数量较多的前提下,可以考虑使用云测平台上的机器进行验证,因此需要针对各云测平台进行调研、比较。 …

打造专属照片分享平台:快速上手Piwigo网页搭建

文章目录 通过cpolar分享本地电脑上有趣的照片:部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo 总结 🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:&#x…

数据可视化和数字孪生相互促进的关系

数据可视化和数字孪生是当今数字化时代中备受关注的两大领域,它们在不同层面和领域为我们提供了深入洞察和智能决策的机会,随着两种技术的不断融合发展,很多人会将他们联系在一起,本文就带大家浅谈一下二者之间相爱相杀的关系。 …

最好的开放式耳机品牌,开放式耳机选购推荐

传统入耳式耳机长时间佩戴会给耳朵增加压力,在封闭状态下,还容易滋生细菌,引发耳部感染、发炎的症状,但开放式耳机就没有这种情况发生,无需入耳设计,佩戴更舒适,音质更真实通透,也不…

Centos7多台服务器免密登录

准备四台服务器: docker0 docker1 docker2 docker3 在docker0服务器上生成公钥和私钥 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

【Leetcode】84.柱状图中最大的矩形(Hard)

一、题目 1、题目描述 给定 n n n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10示例2:…

Java开源项目mall学习笔记(1)——项目初始化

一、学习声明与项目介绍 该笔记是记录学习开源项目mall过程的文档笔记,完全原创,转载请声明。同时也对开源项目的作者表示感谢! mall: 🔥 mall项目是一套基于 SpringBoot Vue uni-app 实现的电商系统,包括前台商城项…

【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端

目 录 1. 新建一个消息生产者2. 新建一个消息消费者3. 测 试 在开始之前,需要先做点准备工作,用 IDEA 新建一个 Maven 项目,取名 kafka-study,然后删掉它的 src 目录,接着在 pom.xml 里面引入下面的依赖。这个项目的作…

NanoPi NEO移植LVGL8.3.5到1.69寸ST7789V屏幕

移植前准备 移植好fbtft屏幕驱动 参考链接:友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕 获取源码 名称地址描述lvglhttps://github.com/lvgl/lvgl.gitlvgl-8.3.5lv_drivershttps://github.com/lvgl/lv_drivers.gitlv_drivers-6.1.1 创建工程目录 创…

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未…

计算机竞赛 python 爬虫与协同过滤的新闻推荐系统

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python 爬虫与协同过滤的新闻推荐系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&…

AUTOSAR NvM协议栈集成方法

一、涉及的模块 Bsw:NvM、MemIf、Fee、Crc Mcal:Fls 其中一些芯片厂商的MCAL也会提供Fee模块,本文选择使用ETAS提供的Fee模块,好处是Fee的Block不需要手动配,在NvM中配好了Block之后,生成Bsw代码的同时会…

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

在直播软件源码平台中,服务器扮演着重要的角色,关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展,直播行业也随之崛起,全世界的人们都加入到了直播软件源码平台中,用户流量的增加让服务器的…

设计模式之构建器(Builder)C++实现

1、构建器提出 在软件功能开发中,有时面临“一个复杂对象”的创建工作,该对象的每个功能接口由于需求的变化,会使每个功能接口发生变化,但是该对象使用每个功能实现一个接口的流程是稳定的。构建器就是解决该类现象的。构建就是定…

爬虫逆向实战(八)--猿人学第十五题

一、数据接口分析 主页地址:猿人学第十五题 1、抓包 通过抓包可以发现数据接口是api/match/15 2、判断是否有加密参数 请求参数是否加密? 查看“载荷”模块可以发现有一个m加密参数 请求头是否加密? 无响应是否加密? 无cook…

[C++] string类的介绍与构造的模拟实现,进来看吧,里面有空调

文章目录 1、string类的出现1.1 C语言中的字符串 2、标准库中的string类2.1 string类 3、string类的常见接口说明及模拟实现3.1 string的常见构造3.2 string的构造函数3.3 string的拷贝构造3.4 string的赋值构造 4、完整代码 1、string类的出现 1.1 C语言中的字符串 C语言中&…