记录自己工作中用到的脚本,因为我们的cocosCreator项目导出web
项目后,需要修改index.html
文件,每次手动修改都很麻烦,而且容易出错,于是决定用脚本来搞定。
我这里是用python写的,python版本为3.8
(adsbygoogle = window.adsbygoogle || []).push({});
要在 HTML 文件的指定位置插入指定的文本,可以使用 Python
的 BeautifulSoup
库。
安装库
首先,安装 BeautifulSoup
和 lxml
:
pip3 install BeautifulSoup
代码
我这里是在index.html
中的<head>
和<body>
中添加了一些代码。完整代码如下:
from bs4 import BeautifulSoup
def insert_code_in_html(file_path):
head_code = '''
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<style>
body, html {
height: 100%;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
}
#GameDiv {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
#Cocos3dGameContainer {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#GameCanvas {
width: 100%;
height: 100%;
}
#loading-animation {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: calc(50% - 200px);
left: 50%;
transform: translate(-50%, -50%);
}
#loading-text {
display: flex;
justify-content: center;
align-items: center;
color: white;
font-size: 20px;
position: absolute;
top: calc(50% - 80px);
left: 50%;
transform: translate(-50%, -50%);
width: 80%;
text-align: center;
}
</style>
'''
body_code = '''
<div id="loading-animation">
<img src="web.png" alt="Loading..." style="width: 100%; height: 100%;">
</div>
<div id="loading-text">Loading may take a few seconds for the first time. Please be patient.</div>
<script>
const tg = window.Telegram.WebApp;
tg.isClosingConfirmationEnabled = true;
</script>
'''
# 读取 HTML 文件内容
with open(file_path, 'r', encoding='utf-8') as file:
soup = BeautifulSoup(file, 'lxml')
# 在 <head> 中插入代码
if soup.head:
soup.head.append(BeautifulSoup(head_code, 'html.parser'))
else:
print("<head> 标签未找到。")
# 在 <body> 中插入代码
if soup.body:
soup.body.append(BeautifulSoup(body_code, 'html.parser'))
else:
print("<body> 标签未找到。")
# 将修改后的 HTML 写回文件
with open(file_path, 'w', encoding='utf-8') as file:
file.write(str(soup))
# 示例用法
file_path = 'web-mobile/index.html'
insert_code_in_html(file_path)
由于自己太懒,连代码都不想运行,于是乎,直接将上面python脚本导出了一个.exe
可执行文件,每次只要双击改执行文件就行了。
踩坑
运行的时候报下面错:
代码语言:javascript复制Traceback (most recent call last):
File ".html.py", line 1, in <module>
from bs4 import BeautifulSoup
File "C:Users84267AppDataRoamingPythonPython38site-packagesbs4__init__.py", line 37, in <module>
from .builder import (
File "C:Users84267AppDataRoamingPythonPython38site-packagesbs4builder__init__.py", line 9, in <module>
from bs4.element import (
File "C:Users84267AppDataRoamingPythonPython38site-packagesbs4element.py", line 13, in <module>
from bs4.formatter import (
File "C:Users84267AppDataRoamingPythonPython38site-packagesbs4formatter.py", line 1, in <module>
from bs4.dammit import EntitySubstitution
File "C:Users84267AppDataRoamingPythonPython38site-packagesbs4dammit.py", line 12, in <module>
from html.entities import codepoint2name
File "E:Project_D_tgbuildhtml.py", line 1, in <module>
from bs4 import BeautifulSoup
ImportError: cannot import name 'BeautifulSoup' from partially initialized module 'bs4' (most likely due to a circular import) (C:Users84267AppDataRoamingPythonPython38site-packagesbs4__init__.py)
如下图:
解决方案: python文件名的问题,因为我的python脚本命名为html.py
,这里的html
和代码里面的html
冲突,所以导致报错,这里只需要修改python的文件名即可。
好吧,表示自己第一次遇到这种因为文件名报错的情况。