<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>拓源网</title><link>https://www.toyean.com/</link><description>专业的zblog主题模版原创网站</description><item><title>微信和QQ访问页面提示使用右上角浏览器打开</title><link>https://www.toyean.com/post/weixin-qq-tips.html</link><description>&lt;p&gt;实现思路：判断微信与QQ的userAgent进而在右上角显示“使用浏览器打开”的提示。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/09/202509281759039646874884.png&quot; alt=&quot;使用方法&quot;/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-markup&quot;&gt;CSS：
&amp;lt;style&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.overlay&amp;nbsp;{&amp;nbsp;display:none;&amp;nbsp;position:fixed;&amp;nbsp;top:0;&amp;nbsp;left:0;&amp;nbsp;width:100%;&amp;nbsp;height:100%;&amp;nbsp;background-color:rgba(0,0,0,0.5);&amp;nbsp;z-index:1000;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.tip-box&amp;nbsp;{&amp;nbsp;position:fixed;&amp;nbsp;top:20px;&amp;nbsp;right:20px;&amp;nbsp;background-color:#fff;&amp;nbsp;padding:10px;&amp;nbsp;border-radius:5px;&amp;nbsp;box-shadow:0&amp;nbsp;2px&amp;nbsp;4px&amp;nbsp;rgba(0,0,0,0.3);&amp;nbsp;z-index:1001;&amp;nbsp;display:none;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.tip-box&amp;nbsp;.tiparrow&amp;nbsp;{&amp;nbsp;display:block;&amp;nbsp;width:0;&amp;nbsp;height:0;&amp;nbsp;border-left:10px&amp;nbsp;solid&amp;nbsp;transparent;&amp;nbsp;border-right:10px&amp;nbsp;solid&amp;nbsp;transparent;&amp;nbsp;border-bottom:10px&amp;nbsp;solid&amp;nbsp;#fff;&amp;nbsp;position:absolute;&amp;nbsp;top:-10px;&amp;nbsp;right:10px;&amp;nbsp;}
&amp;lt;/style&amp;gt;
HTML：
&amp;lt;div&amp;nbsp;class=&amp;quot;overlay&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div&amp;nbsp;class=&amp;quot;tip-box&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;class=&amp;quot;tip-content&amp;quot;&amp;gt;点击右上角“...”使用浏览器打开&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;nbsp;class=&amp;quot;tiparrow&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
jQuery：
&amp;lt;script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(function&amp;nbsp;()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;ua&amp;nbsp;=&amp;nbsp;navigator.userAgent.toLowerCase();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(ua.match(/MicroMessenger/i)&amp;nbsp;||&amp;nbsp;ua.match(/QQ/i))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;#39;.overlay&amp;#39;).show();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;#39;.tip-box&amp;#39;).show();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;p&gt;效果截图：&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/09/202509281759039697734808.png&quot; alt=&quot;点击右上角…使用浏览器打开&quot;/&gt;&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/weixin-qq-tips.html&quot; target=&quot;_blank&quot;&gt;继续阅读《微信和QQ访问页面提示使用右上角浏览器打开》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: web前端 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/weixin-qq-tips.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/weixin-qq-tips.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/266.html&quot;&gt;Zblog去掉留言评论中的“最后编辑”字样&lt;/a&gt; (2012-03-16)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/php_7.html&quot;&gt;10天学会PHP之第7天&lt;/a&gt; (2011-04-08)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/53.html&quot;&gt;表格1像素边框CSS解决方法&lt;/a&gt; (2010-12-11)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/zblog-erjimulu-wenzhang.html&quot;&gt;Zblog调用二级目录最新文章的方法&lt;/a&gt; (2012-05-28)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/136.html&quot;&gt;二十种实用的WordPress SQL查询&lt;/a&gt; (2011-03-31)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Sun, 28 Sep 2025 14:02:10 +0800</pubDate></item><item><title>[反调试]审查元素清空页面或重定向</title><link>https://www.toyean.com/post/nodebug.html</link><description>&lt;p&gt;为防止用户通过浏览器审查元素代码，以保护网页内容的安全性和隐私性。以下是一个反调试示例代码，可以阻止用户通过审查元素查看网页源代码，变量为1时清空页面内容，变量为2时重定向到指定页面。&lt;/p&gt;&lt;p&gt;反调试脚本：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-javascript&quot;&gt;function&amp;nbsp;checkDevTools()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;threshold&amp;nbsp;=&amp;nbsp;160;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;devtoolsOpen&amp;nbsp;=&amp;nbsp;window.outerWidth&amp;nbsp;-&amp;nbsp;window.innerWidth&amp;nbsp;&amp;gt;&amp;nbsp;threshold&amp;nbsp;||&amp;nbsp;window.outerHeight&amp;nbsp;-&amp;nbsp;window.innerHeight&amp;nbsp;&amp;gt;&amp;nbsp;threshold;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(devtoolsOpen)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;debugprotect&amp;nbsp;=
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;1：&amp;nbsp;审查元素时-&amp;gt;[清空页面内容]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;2：&amp;nbsp;审查元素时-&amp;gt;[重定向到指定页面]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;debugprotect&amp;nbsp;=&amp;nbsp;&amp;#39;1&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(debugprotect)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&amp;#39;1&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.documentElement.parentNode.replaceChild(document.createElement(&amp;#39;html&amp;#39;),&amp;nbsp;document.documentElement);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&amp;#39;2&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location.href&amp;nbsp;=&amp;nbsp;&amp;#39;https://www.toyean.com/&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
setInterval(checkDevTools,&amp;nbsp;100);&lt;/pre&gt;&lt;p&gt;完整代码：&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-markup&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;name=&amp;quot;viewport&amp;quot;&amp;nbsp;content=&amp;quot;width=device-width,&amp;nbsp;initial-scale=1.0&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;[反调试]审查元素清空页面或重定向-拓源网&amp;lt;/title&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;checkDevTools()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;threshold&amp;nbsp;=&amp;nbsp;160;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;devtoolsOpen&amp;nbsp;=&amp;nbsp;window.outerWidth&amp;nbsp;-&amp;nbsp;window.innerWidth&amp;nbsp;&amp;gt;&amp;nbsp;threshold&amp;nbsp;||&amp;nbsp;window.outerHeight&amp;nbsp;-&amp;nbsp;window.innerHeight&amp;nbsp;&amp;gt;&amp;nbsp;threshold;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(devtoolsOpen)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;debugprotect&amp;nbsp;=
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;1：&amp;nbsp;审查元素时-&amp;gt;[清空页面内容]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;2：&amp;nbsp;审查元素时-&amp;gt;[重定向到指定页面]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;debugprotect&amp;nbsp;=&amp;nbsp;&amp;#39;1&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(debugprotect)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&amp;#39;1&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.documentElement.parentNode.replaceChild(document.createElement(&amp;#39;html&amp;#39;),&amp;nbsp;document.documentElement);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;&amp;#39;2&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location.href&amp;nbsp;=&amp;nbsp;&amp;#39;https://www.toyean.com/&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setInterval(checkDevTools,&amp;nbsp;100);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;热爱可抵&amp;nbsp;岁月漫长！&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;猛戳查看-&amp;gt;&lt;a href=&quot;https://www.toyean.com/zb_users/upload/nodebug.html&quot; target=&quot;_blank&quot; title=&quot;反调试&quot; rel=&quot;nofollow&quot;&gt;演示效果&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;需要注意的是，反调试方法并非绝对可靠，一些高级用户仍可能绕过限制。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;以下是绕过限制的方法介绍，和升级后的反调试代码，增加了&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;performance检测、&lt;/span&gt;禁用鼠标右键、禁用选中文本、禁用复制文本、无限debugger、以及禁用调试快捷键等：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;[orhide]&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;绕过快捷键限制：可点击浏览器地址栏使用快捷键；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;绕过开发工具检测：将审查元素设置为“取消停靠至单独的窗口”；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;绕过全部保护：浏览器审查元素设置——调试程序——停用Javascript；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;清理页面所有计时器（浏览器控制台运行）：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-javascript&quot;&gt;(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;highestTimeoutID&amp;nbsp;=&amp;nbsp;setTimeout(()&amp;nbsp;=&amp;gt;&amp;nbsp;{});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;highestIntervalID&amp;nbsp;=&amp;nbsp;setTimeout(()&amp;nbsp;=&amp;gt;&amp;nbsp;{});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(let&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;=&amp;nbsp;highestTimeoutID;&amp;nbsp;i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clearTimeout(i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(let&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;=&amp;nbsp;highestIntervalID;&amp;nbsp;i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clearInterval(i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
})();&lt;/pre&gt;&lt;p&gt;升级后的完整代码：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-markup&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt;
&amp;lt;html&amp;nbsp;lang=&amp;quot;en&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;name=&amp;quot;viewport&amp;quot;&amp;nbsp;content=&amp;quot;width=device-width,&amp;nbsp;initial-scale=1.0&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;[反调试]审查元素清空页面或重定向-拓源网&amp;lt;/title&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--此处引用jquery--&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//内容保护
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.undebugon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;检测开发者工具是否打开
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;checkDevTools()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!window.tpure&amp;nbsp;||&amp;nbsp;!tpure.undebugon)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;threshold&amp;nbsp;=&amp;nbsp;160;&amp;nbsp;//&amp;nbsp;检测窗口宽高差值的阈值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;devtoolsOpen&amp;nbsp;=&amp;nbsp;window.outerWidth&amp;nbsp;-&amp;nbsp;window.innerWidth&amp;nbsp;&amp;gt;&amp;nbsp;threshold&amp;nbsp;||&amp;nbsp;window.outerHeight&amp;nbsp;-&amp;nbsp;window.innerHeight&amp;nbsp;&amp;gt;&amp;nbsp;threshold;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(devtoolsOpen)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;清除定时器
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clearInterval(intervalId);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(tpure.debugcleanon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.documentElement.innerHTML&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write(&amp;#39;&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(tpure.debughrefon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.documentElement.innerHTML&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write(&amp;#39;&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.location.href&amp;nbsp;=&amp;nbsp;tpure.debughref;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(tpure.debuggeron)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;devtoolsOpenByPerformance&amp;nbsp;=&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;start&amp;nbsp;=&amp;nbsp;performance.now();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debugger;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;end&amp;nbsp;=&amp;nbsp;performance.now();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(end&amp;nbsp;-&amp;nbsp;start&amp;nbsp;&amp;gt;&amp;nbsp;100)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;devtoolsOpenByPerformance&amp;nbsp;=&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;devtoolsOpen&amp;nbsp;=&amp;nbsp;devtoolsOpenByPerformance;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;保存定时器&amp;nbsp;ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;intervalId&amp;nbsp;=&amp;nbsp;setInterval(checkDevTools,&amp;nbsp;100);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//禁止拖拽
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.undragon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).bind(&amp;quot;dragstart&amp;quot;,function(e){return&amp;nbsp;false;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//禁止鼠标右键
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.unrightmenuon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).bind(&amp;quot;contextmenu&amp;quot;,function(e){return&amp;nbsp;false;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//禁止选中文字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.unselecttexton){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.onselectstart=function(){return&amp;nbsp;false;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//禁止复制文字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.uncopyon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).bind(&amp;#39;copy&amp;#39;,&amp;nbsp;function&amp;nbsp;(e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.preventDefault();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//防快捷键审查元素
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(tpure.unkeyon){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).keydown(function(e){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(e.which===123){return&amp;nbsp;false;}//禁用F12键
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(e.ctrlKey&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;e.keyCode===85){return&amp;nbsp;false;}//禁止Ctrl+U
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(e.ctrlKey&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;e.shiftKey&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(e.keyCode===73&amp;nbsp;||&amp;nbsp;e.keyCode===74)){return&amp;nbsp;false;}//禁止Ctrl+Shift+I/J
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.tpure={
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;undebugon:true,//总开关
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;undragon:true,//屏蔽拖拽
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unrightmenuon:true,//屏蔽鼠标右键
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unselecttexton:&amp;#39;1&amp;#39;,//屏蔽选中文字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uncopyon:true,//屏蔽复制文字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unkeyon:true,//屏蔽快捷键审查元素
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debuggeron:true,//无限断点
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debugcleanon:true,//审查元素时清空页面
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debughrefon:true,//审查元素时跳转链接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debughref:&amp;#39;https://www.baidu.com/&amp;#39;//链接地址，为空时跳转至空白页
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;热爱可抵&amp;nbsp;岁月漫长！&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;[/orhide]&lt;/span&gt;&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/nodebug.html&quot; target=&quot;_blank&quot;&gt;继续阅读《[反调试]审查元素清空页面或重定向》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: web前端 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/nodebug.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/nodebug.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/backtotop.html&quot;&gt;仿新浪微博返回顶部的js实现&lt;/a&gt; (2011-04-27)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/183.html&quot;&gt;JS的十四个编写技巧&lt;/a&gt; (2011-04-27)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/php_1.html&quot;&gt;10天学会PHP之第1天&lt;/a&gt; (2011-04-08)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/222.html&quot;&gt;Android模拟器创建参数说明&lt;/a&gt; (2011-10-06)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/182.html&quot;&gt;PHP变量总结&lt;/a&gt; (2011-04-27)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Thu, 21 Aug 2025 10:49:31 +0800</pubDate></item><item><title>批量替换文件名的powershell脚本</title><link>https://www.toyean.com/post/463.html</link><description>&lt;p&gt;我们常常在按Ctrl键用鼠标单击选择多个文件时，不小心手抖或者鼠标不灵敏，会复制出来很多副本文件，第一时间Ctrl+Z可以撤销操作，当后续进行了其他操作回来再处理这些副本文件，可以用以下powershell脚本，将所有带“ - 副本”名称的文件全部删除。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/08/202508051754359141730916.jpg&quot; alt=&quot;批量删除副本文件&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;打开需要批量替换文件名所在的文件夹，按住Shift键，右键点击文件夹空白处，选择“在此处打开 PowerShell 窗口”。&lt;/p&gt;&lt;p style=&quot;text-wrap: wrap;&quot;&gt;运行以下命令：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;Get-ChildItem&amp;nbsp;-File&amp;nbsp;-Recurse&amp;nbsp;|&amp;nbsp;Where-Object&amp;nbsp;{&amp;nbsp;$_.Name&amp;nbsp;-like&amp;nbsp;&amp;quot;*&amp;nbsp;-&amp;nbsp;副本*&amp;quot;&amp;nbsp;}&amp;nbsp;|&amp;nbsp;Remove-Item&lt;/pre&gt;&lt;p&gt;当然可以指定文件类型，如jpg文件：&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;Get-ChildItem&amp;nbsp;-Filter&amp;nbsp;*.jpg&amp;nbsp;|&amp;nbsp;Where-Object&amp;nbsp;{&amp;nbsp;$_.Name&amp;nbsp;-like&amp;nbsp;&amp;quot;*&amp;nbsp;-&amp;nbsp;副本*&amp;quot;&amp;nbsp;}&amp;nbsp;|&amp;nbsp;Remove-Item&lt;/pre&gt;&lt;p&gt;如果不存在重复文件的情况，只希望批量修改文件名，可以用以下命令：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;Get-ChildItem&amp;nbsp;-Filter&amp;nbsp;*.jpg&amp;nbsp;|&amp;nbsp;Rename-Item&amp;nbsp;-NewName&amp;nbsp;{&amp;nbsp;$_.Name&amp;nbsp;-replace&amp;nbsp;&amp;quot;&amp;nbsp;-&amp;nbsp;副本&amp;quot;,&amp;nbsp;&amp;quot;&amp;quot;&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;这条命令会遍历当前文件夹下所有.jpg文件，并把文件名中的“ - 副本”字样删除，可自行修改需要替换的文件扩展名和要替换的文字内容。&lt;/p&gt;&lt;p&gt;需要注意的是，文件夹路径不能含有特殊字符。&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/463.html&quot; target=&quot;_blank&quot;&gt;继续阅读《批量替换文件名的powershell脚本》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/463.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/463.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/246.html&quot;&gt;Windows7系统IIS网站不显示验证码的解决方法&lt;/a&gt; (2011-12-14)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/259.html&quot;&gt;Win7显示摄像头的方法&lt;/a&gt; (2012-02-08)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/36.html&quot;&gt;非常牛X的30条QQ签名&lt;/a&gt; (2010-10-30)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/176.html&quot;&gt;2011网站SEO六大必杀技&lt;/a&gt; (2011-04-21)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/249.html&quot;&gt;无任何网络提供程序接受指定的网络路径&lt;/a&gt; (2011-12-22)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Tue, 05 Aug 2025 08:19:50 +0800</pubDate></item><item><title>使用Python移除PDF编辑权限密码</title><link>https://www.toyean.com/post/pdf-remove-edit-password.html</link><description>&lt;p&gt;在日常使用PDF文件时，我们常常在修改PDF文件时遇到当前PDF文件“被保护，请输入权限密码”的提示，这使得我们无法对文件内容进行修改、复制或打印等操作，给工作和学习带来诸多不便，通过安装PyPDF2库来移除权限密码。&lt;/p&gt;&lt;p&gt;文件源码：&lt;/p&gt;&lt;p&gt;[loginhide]&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;import&amp;nbsp;tkinter&amp;nbsp;as&amp;nbsp;tk
from&amp;nbsp;tkinter&amp;nbsp;import&amp;nbsp;filedialog
from&amp;nbsp;PyPDF2&amp;nbsp;import&amp;nbsp;PdfReader,&amp;nbsp;PdfWriter

def&amp;nbsp;main():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;=&amp;nbsp;tk.Tk()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.title(&amp;quot;PDF编辑权限移除工具&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.geometry(&amp;quot;400x200&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;存储选中的文件路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected_file&amp;nbsp;=&amp;nbsp;tk.StringVar()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;选择PDF文件的函数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;select_pdf():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path&amp;nbsp;=&amp;nbsp;filedialog.askopenfilename(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title=&amp;quot;选择PDF文件&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filetypes=[(&amp;quot;PDF文件&amp;quot;,&amp;nbsp;&amp;quot;*.pdf&amp;quot;)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;file_path:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected_file.set(file_path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;移除权限的核心函数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;remove_security():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;src_path&amp;nbsp;=&amp;nbsp;selected_file.get()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;not&amp;nbsp;src_path:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label.config(text=&amp;quot;请先选择需要处理的PDF文件&amp;quot;,&amp;nbsp;fg=&amp;quot;red&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;open(src_path,&amp;nbsp;&amp;quot;rb&amp;quot;)&amp;nbsp;as&amp;nbsp;f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reader&amp;nbsp;=&amp;nbsp;PdfReader(f)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;检查是否加密（安装PyCryptodome后可正确处理AES加密）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;reader.is_encrypted:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;尝试用空密码解密（适用于仅限制权限的加密）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;not&amp;nbsp;reader.decrypt(&amp;quot;&amp;quot;):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label.config(text=&amp;quot;错误：PDF需要打开密码，无法处理&amp;quot;,&amp;nbsp;fg=&amp;quot;red&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;创建无限制的新PDF
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer&amp;nbsp;=&amp;nbsp;PdfWriter()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;page&amp;nbsp;in&amp;nbsp;reader.pages:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.add_page(page)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;生成输出路径（原路径添加&amp;quot;_无限制&amp;quot;后缀）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dest_path&amp;nbsp;=&amp;nbsp;src_path.replace(&amp;quot;.pdf&amp;quot;,&amp;nbsp;&amp;quot;_无限制.pdf&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;open(dest_path,&amp;nbsp;&amp;quot;wb&amp;quot;)&amp;nbsp;as&amp;nbsp;output_f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.write(output_f)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label.config(text=f&amp;quot;已完成！输出文件：{dest_path}&amp;quot;,&amp;nbsp;fg=&amp;quot;green&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label.config(text=f&amp;quot;处理失败：{str(e)}&amp;quot;,&amp;nbsp;fg=&amp;quot;red&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;界面组件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Button(root,&amp;nbsp;text=&amp;quot;选择PDF文件&amp;quot;,&amp;nbsp;command=select_pdf).pack(pady=10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Entry(root,&amp;nbsp;textvariable=selected_file,&amp;nbsp;width=50).pack(pady=5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Button(root,&amp;nbsp;text=&amp;quot;移除编辑权限&amp;quot;,&amp;nbsp;command=remove_security).pack(pady=5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label&amp;nbsp;=&amp;nbsp;tk.Label(root,&amp;nbsp;text=&amp;quot;&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result_label.pack(pady=10)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.mainloop()

if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;quot;__main__&amp;quot;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main()&lt;/pre&gt;&lt;p&gt;[/loginhide]&lt;/p&gt;&lt;p&gt;运行前确保安装了PyPDF2和pycryptodome两个依赖库：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#运行终端，执行以下命令：
pip&amp;nbsp;install&amp;nbsp;PyPDF2
pip&amp;nbsp;install&amp;nbsp;pycryptodome&lt;/pre&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/06/202506251750833632731240.jpg&quot; alt=&quot;PDF移除权限密码工具.jpg&quot;/&gt;&lt;/p&gt;&lt;p&gt;运行后，在所选的PDF同目录下生成一个新的PDF文件，再次编辑就没有限制了，以上适用于带有编辑权限密码（非打开密码）的PDF文件。&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/pdf-remove-edit-password.html&quot; target=&quot;_blank&quot;&gt;继续阅读《使用Python移除PDF编辑权限密码》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/pdf-remove-edit-password.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/pdf-remove-edit-password.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/17.html&quot;&gt;别再用中国人的方法背英语单词了，英国人是这样背的！&lt;/a&gt; (2010-10-15)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/258.html&quot;&gt;2012年假巧安排&lt;/a&gt; (2012-02-07)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/win7-lan-speed.html&quot;&gt;Win7访问局域网共享速度慢的解决方法&lt;/a&gt; (2012-06-21)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/ppt-save-page.html&quot;&gt;写一款《PPT将指定页面另存为》小工具&lt;/a&gt; (2025-05-21)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/40.html&quot;&gt;你不珍惜我，没关系。当某天，你被伤害，想起我。你就会明白了&lt;/a&gt; (2010-11-03)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Wed, 25 Jun 2025 14:19:01 +0800</pubDate></item><item><title>写一款《PPT将指定页面另存为》小工具</title><link>https://www.toyean.com/post/ppt-save-page.html</link><description>&lt;p&gt;在团队协作编辑 PPT 的过程中，文件传输问题常常成为效率的 “拦路虎”。当多位成员各自负责不同板块内容时，一份完整的 PPT 往往因整合了大量素材、高清图片和多媒体元素，导致文件体积变得十分臃肿。若通过微信等常规社交软件发送，不仅传输速度缓慢，还时常出现发送失败的情况，极大影响了项目推进节奏。&lt;/p&gt;&lt;p&gt;日常应对这种状况时，大家普遍采用较为繁琐的手动操作方式。首先需要提前保存原始文件，避免误删重要内容。接着打开 PPT，全选所有页面，然后按住 Ctrl 键，逐个精准点击需要保留的页面，再按下 Del 键，将其他不需要的页面一一删除。完成删减操作后，再次保存文件，最后将这份 “瘦身” 后的 PPT 另存为新文件，发送给合稿人。这一系列操作看似简单，但在时间紧迫、任务繁重的情况下，不仅耗费大量精力，还容易出现误删关键页面的情况，为工作带来不必要的麻烦。&lt;/p&gt;&lt;p&gt;正是在这样的背景下，一款名为 “PPT 将指定页面另存为” 的小工具应运而生。它的出现，就像为团队协作注入一剂 “强心针”，有望彻底改变以往繁琐低效的工作模式，成为提升团队工作效率的得力助手。这款工具操作界面简洁明了，即使是 PPT 使用新手，也能快速上手。用户只需在工具界面中简单勾选需要保留的页面，点击 “另存为” 按钮，就能一键生成仅包含指定页面的 PPT 文件，无需复杂的手动删改过程。不仅如此，它还能智能识别页面中的素材关联，确保导出文件的完整性和格式准确性。接下来，就让我们一同深入了解这款小工具的神奇之处与强大功能。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/05/202505211747812021734802.png&quot; alt=&quot;PPT将指定页面另存为&quot;/&gt;&lt;/p&gt;&lt;p&gt;使用方法：&lt;/p&gt;&lt;p&gt;选择PPT文件，输入要保留的页面序号，用空格分隔，点击保存按钮不必担心覆盖源PPT，软件会在PPT所在目录重新生成一个新的PPT，命名格式为：[源PPT文件名]-p(页面序号如1,3,5).pptx&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;/p&gt;&lt;p&gt;[loginhide]&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/zb_users/upload/pptSavePage.zip&quot; target=&quot;_blank&quot;&gt;https://www.toyean.com/zb_users/upload/pptSavePage.zip&lt;/a&gt;&lt;br/&gt;[/loginhide]&lt;/p&gt;&lt;p&gt;软件源码：&lt;/p&gt;&lt;p&gt;[orhide]&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;import&amp;nbsp;tkinter&amp;nbsp;as&amp;nbsp;tk
from&amp;nbsp;tkinter&amp;nbsp;import&amp;nbsp;filedialog
from&amp;nbsp;pptx&amp;nbsp;import&amp;nbsp;Presentation
import&amp;nbsp;shutil
import&amp;nbsp;os

def&amp;nbsp;save_ppt():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;获取选择的&amp;nbsp;PPT&amp;nbsp;文件路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path&amp;nbsp;=&amp;nbsp;file_entry.get()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;修改为使用空格分隔获取输入的页面索引
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;page_indices&amp;nbsp;=&amp;nbsp;[int(index)&amp;nbsp;-&amp;nbsp;1&amp;nbsp;for&amp;nbsp;index&amp;nbsp;in&amp;nbsp;page_entry.get().split()]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;生成新文件名，将&amp;nbsp;_new&amp;nbsp;改为&amp;nbsp;-p(索引)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;original_indices&amp;nbsp;=&amp;nbsp;[str(index&amp;nbsp;+&amp;nbsp;1)&amp;nbsp;for&amp;nbsp;index&amp;nbsp;in&amp;nbsp;page_indices]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index_str&amp;nbsp;=&amp;nbsp;&amp;#39;,&amp;#39;.join(original_indices)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new_file_path&amp;nbsp;=&amp;nbsp;file_path.rsplit(&amp;#39;.&amp;#39;,&amp;nbsp;1)[0]&amp;nbsp;+&amp;nbsp;f&amp;#39;-p({index_str}).&amp;#39;&amp;nbsp;+&amp;nbsp;file_path.rsplit(&amp;#39;.&amp;#39;,&amp;nbsp;1)[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shutil.copyfile(file_path,&amp;nbsp;new_file_path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;打开复制后的&amp;nbsp;PPT&amp;nbsp;文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prs&amp;nbsp;=&amp;nbsp;Presentation(new_file_path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;按索引删除页面
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;slides&amp;nbsp;=&amp;nbsp;list(prs.slides)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;reversed(range(len(slides))):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;i&amp;nbsp;not&amp;nbsp;in&amp;nbsp;page_indices:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rId&amp;nbsp;=&amp;nbsp;prs.slides._sldIdLst[i].rId
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prs.part.drop_rel(rId)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;del&amp;nbsp;prs.slides._sldIdLst[i]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;保存修改后的&amp;nbsp;PPT&amp;nbsp;文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prs.save(new_file_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status_label.config(text=&amp;quot;保存成功！&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status_label.config(text=f&amp;quot;保存失败:&amp;nbsp;{str(e)}&amp;quot;)

def&amp;nbsp;select_file():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;打开文件选择对话框
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path&amp;nbsp;=&amp;nbsp;filedialog.askopenfilename(filetypes=[(&amp;quot;PPT&amp;nbsp;Files&amp;quot;,&amp;nbsp;&amp;quot;*.ppt;*.pptx&amp;quot;)])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_entry.delete(0,&amp;nbsp;tk.END)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_entry.insert(0,&amp;nbsp;file_path)

#&amp;nbsp;创建主窗口
root&amp;nbsp;=&amp;nbsp;tk.Tk()
root.title(&amp;quot;PPT将指定页面另存为&amp;quot;)

#&amp;nbsp;设置窗口图标
icon_path&amp;nbsp;=&amp;nbsp;os.path.join(os.path.dirname(__file__),&amp;nbsp;&amp;#39;icon.ico&amp;#39;)
if&amp;nbsp;os.path.isfile(icon_path):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.iconbitmap(icon_path)

#&amp;nbsp;文件选择控件
file_label&amp;nbsp;=&amp;nbsp;tk.Label(root,&amp;nbsp;text=&amp;quot;选择&amp;nbsp;PPT&amp;nbsp;文件:&amp;quot;)
file_label.pack(pady=10)

file_entry&amp;nbsp;=&amp;nbsp;tk.Entry(root,&amp;nbsp;width=50)
file_entry.pack(pady=5)

file_button&amp;nbsp;=&amp;nbsp;tk.Button(root,&amp;nbsp;text=&amp;quot;选择文件&amp;quot;,&amp;nbsp;command=select_file)
file_button.pack(pady=5)

#&amp;nbsp;页面索引输入控件
page_label&amp;nbsp;=&amp;nbsp;tk.Label(root,&amp;nbsp;text=&amp;quot;输入要保留的页面索引（用空格分隔，如&amp;nbsp;1&amp;nbsp;3&amp;nbsp;5）:&amp;quot;)
page_label.pack(pady=10)

page_entry&amp;nbsp;=&amp;nbsp;tk.Entry(root,&amp;nbsp;width=50)
page_entry.pack(pady=5)

#&amp;nbsp;保存按钮
save_button&amp;nbsp;=&amp;nbsp;tk.Button(root,&amp;nbsp;text=&amp;quot;保存&amp;quot;,&amp;nbsp;command=save_ppt)
save_button.pack(pady=20)

#&amp;nbsp;状态标签
status_label&amp;nbsp;=&amp;nbsp;tk.Label(root,&amp;nbsp;text=&amp;quot;&amp;quot;)
status_label.pack(pady=10)

#&amp;nbsp;运行主循环
root.mainloop()&lt;/pre&gt;&lt;p&gt;[/orhide]&lt;br/&gt;&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/ppt-save-page.html&quot; target=&quot;_blank&quot;&gt;继续阅读《写一款《PPT将指定页面另存为》小工具》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/ppt-save-page.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/ppt-save-page.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/free-money.html&quot;&gt;免费是怎么赚钱的？&lt;/a&gt; (2012-05-17)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/2011.html&quot;&gt;留恋的2011，难舍说再见！&lt;/a&gt; (2011-12-31)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/love.html&quot;&gt;什么是爱情？&lt;/a&gt; (2011-04-08)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/174.html&quot;&gt;浏览器的战略意义&lt;/a&gt; (2011-04-20)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/190.html&quot;&gt;爱情=十元戒指+蛋炒饭&lt;/a&gt; (2011-05-01)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Wed, 21 May 2025 15:14:24 +0800</pubDate></item><item><title>让jquery代码只能在指定域名下运行的三种方法</title><link>https://www.toyean.com/post/jquery-allow-domain.html</link><description>&lt;p&gt;&lt;strong&gt;Base64方法一：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对整个字符串进行Base64编码，要确保在编码和解码过程中，域名列表始终是有效的JSON格式。这样可以避免JSON.parse()抛出语法错误。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-javascript&quot;&gt;const&amp;nbsp;encodedDomains&amp;nbsp;=&amp;nbsp;&amp;#39;WyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXQ==&amp;#39;;//localhost、127.0.0.1
const&amp;nbsp;decodedDomainList&amp;nbsp;=&amp;nbsp;JSON.parse(atob(encodedDomains));
const&amp;nbsp;currentDomain&amp;nbsp;=&amp;nbsp;window.location.hostname;
if&amp;nbsp;(decodedDomainList.includes(currentDomain))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//jQuery代码段...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;#39;body&amp;#39;).append(&amp;#39;&amp;lt;p&amp;gt;看到此内容代表在允许的域名中且运行完毕&amp;lt;/p&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Base64方法二：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对单独的域名进行Base64编码。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-javascript&quot;&gt;var&amp;nbsp;allowedDomains&amp;nbsp;=&amp;nbsp;[&amp;#39;bG9jYWxob3N0&amp;#39;,&amp;#39;MTI3LjAuMC4x&amp;#39;];&amp;nbsp;//localhost,&amp;nbsp;127.0.0.1
var&amp;nbsp;currentDomain&amp;nbsp;=&amp;nbsp;window.location.hostname;
var&amp;nbsp;isAllowed&amp;nbsp;=&amp;nbsp;false;

for&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;allowedDomains.length;&amp;nbsp;i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;decodedDomain&amp;nbsp;=&amp;nbsp;atob(allowedDomains[i]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(currentDomain.endsWith(decodedDomain))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isAllowed&amp;nbsp;=&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
if&amp;nbsp;(isAllowed)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//jQuery代码段...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;#39;body&amp;#39;).append(&amp;#39;&amp;lt;p&amp;gt;看到此内容代表在允许的域名中且运行完毕&amp;lt;/p&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;16进制方法：&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-javascript&quot;&gt;const&amp;nbsp;hexEncodedDomains&amp;nbsp;=&amp;nbsp;&amp;#39;5b226c6f63616c686f7374222c223132372e302e302e31225d&amp;#39;;//localhost、127.0.0.1
const&amp;nbsp;hexToArray&amp;nbsp;=&amp;nbsp;hexEncodedDomains.match(/.{1,2}/g);
const&amp;nbsp;decodedDomainList&amp;nbsp;=&amp;nbsp;String.fromCharCode(...hexToArray.map(byte&amp;nbsp;=&amp;gt;&amp;nbsp;parseInt(byte,&amp;nbsp;16)));
const&amp;nbsp;domainList&amp;nbsp;=&amp;nbsp;JSON.parse(decodedDomainList);
const&amp;nbsp;currentDomain&amp;nbsp;=&amp;nbsp;window.location.hostname;
if&amp;nbsp;(domainList.includes(currentDomain))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//jQuery代码段...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&amp;#39;body&amp;#39;).append(&amp;#39;&amp;lt;p&amp;gt;看到此内容代表在允许的域名中且运行完毕&amp;lt;/p&amp;gt;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});
}&lt;/pre&gt;&lt;p&gt;以上三种方法均以localhost和127.0.0.1为例，无论是Base64还是16进制法，都可被轻易的解码，可使用更复杂的AES算法。&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/jquery-allow-domain.html&quot; target=&quot;_blank&quot;&gt;继续阅读《让jquery代码只能在指定域名下运行的三种方法》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: web前端 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/jquery-allow-domain.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/jquery-allow-domain.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/10.html&quot;&gt;解决IE6不支持min-height和max-heigt的bug&lt;/a&gt; (2010-10-13)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/pi.html&quot;&gt;圆周率背诵工具&lt;/a&gt; (2024-12-24)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/66.html&quot;&gt;区别不同浏览器的CSS hack写法&lt;/a&gt; (2011-01-11)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/226.html&quot;&gt;仿新浪微博效果&lt;/a&gt; (2011-10-09)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/95.html&quot;&gt;JS实现非常绚丽的齿轮效果&lt;/a&gt; (2011-03-06)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Sun, 18 May 2025 00:52:12 +0800</pubDate></item><item><title>PPT拼图批量生成工具</title><link>https://www.toyean.com/post/ppt-tools.html</link><description>&lt;p&gt;最近写了一款职场办公辅助利器 —— PPT拼图批量生成工具。&lt;/p&gt;&lt;p&gt;这是一款专为提升演示文稿存档效率而精心打造的软件，它将彻底改变您对PPT文件的存档体验，让繁琐的页面整合变得轻松又高效。&lt;/p&gt;&lt;p&gt;在日常工作中，我们常常为了在海量PPT中查找内容而苦恼，传统的手动依次打开PPT的查找方式不仅耗时费力，还会因PPT文件过大导致崩溃等问题。为了解决这一痛点，我们推出了PPT拼图批量生成工具。&lt;/p&gt;&lt;p&gt;这款软件具备以下卓越特性：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一键式操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;简洁直观的图形用户界面，让您无需复杂的学习过程，即使是初学者也能轻松上手。只需通过简单的文件选择操作，无论是指定整个目录下的PPT文件批量处理，还是单独挑选多个PPT文件逐一操作，都能迅速完成。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;智能拼图算法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;软件内置先进的拼图算法，能够自动识别每一页PPT的尺寸和内容，根据设定的宽度（1200px）智能调整每一页截图的大小，并以美观的布局进行排版。从第二页开始，每行显示两张PPT页面截图，外部和内部间距等宽，确保拼图整体美观、协调，让视觉效果更加舒适。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;高效批量处理&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;当您需要处理大量PPT文件时，PPT拼图批量生成工具的处理功能将发挥巨大作用。它可以快速扫描指定目录下的所有PPT文件，依次生成对应的拼图，并自动保存在PPT文件所在目录，文件名与原PPT同名，方便您快速查找和使用，极大地节省了时间和精力。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;兼容性强&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;PPT拼图批量生成工具支持多种常见的PPT文件格式，无论是最新版本的PPTX文件，还是旧版本的PPT文件，都能完美兼容，确保您在不同场景下都能正常使用。&lt;/p&gt;&lt;p&gt;我们深知，时间就是效率，效率就是竞争力。PPT拼图批量生成工具的出现，旨在帮助您在繁忙的工作中，快速、高效地完成PPT页面的整合工作，让您有更多的时间专注于内容的创作和优化，提升工作成果的质量。&lt;/p&gt;&lt;p&gt;无论您是企业中的商务人士，需要快速整理演示文稿；还是教育领域的教师，需要将教学课件整合展示；亦或是创意行业的设计师，需要对设计思路进行视觉化梳理，PPT拼图批量生成工具都将为您提供最贴心、最便捷的服务。&lt;/p&gt;&lt;p&gt;现在，就让我们一起开启PPT拼图生成器的智能之旅，让办公更加高效，让演示更加精彩！&lt;/p&gt;&lt;p&gt;初版批量生成拼图，在目录中调整日期查找较为不便，于是更新为拼图文件时间与PPT文件时间一致，这样在目录中按日期查找起来就方便多了。&lt;/p&gt;&lt;p&gt;软件下载：&lt;/p&gt;&lt;p&gt;[loginhide]&lt;/p&gt;&lt;p&gt;下载地址：&lt;a href=&quot;https://www.toyean.com/zb_users/upload/ppt-thumb-tools.zip&quot; target=&quot;_self&quot;&gt;https://www.toyean.com/zb_users/upload/ppt-thumb-tools.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[/loginhide]&lt;/p&gt;&lt;p&gt;软件源码：&lt;/p&gt;&lt;p&gt;[orhide]&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;import&amp;nbsp;os
import&amp;nbsp;tempfile
import&amp;nbsp;comtypes.client
from&amp;nbsp;PIL&amp;nbsp;import&amp;nbsp;Image,&amp;nbsp;ImageColor,&amp;nbsp;ImageDraw
from&amp;nbsp;tkinter&amp;nbsp;import&amp;nbsp;Tk,&amp;nbsp;Label,&amp;nbsp;Button,&amp;nbsp;filedialog,&amp;nbsp;messagebox,&amp;nbsp;Menu,&amp;nbsp;IntVar
from&amp;nbsp;tkinter.ttk&amp;nbsp;import&amp;nbsp;Frame,&amp;nbsp;Treeview,&amp;nbsp;Progressbar&amp;nbsp;&amp;nbsp;#&amp;nbsp;导入&amp;nbsp;Progressbar
#&amp;nbsp;导入&amp;nbsp;TclError
from&amp;nbsp;_tkinter&amp;nbsp;import&amp;nbsp;TclError
#&amp;nbsp;导入&amp;nbsp;tkinterdnd2
from&amp;nbsp;tkinterdnd2&amp;nbsp;import&amp;nbsp;DND_FILES,&amp;nbsp;TkinterDnD

class&amp;nbsp;PPTMosaicApp:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;root):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;修改&amp;nbsp;root&amp;nbsp;为&amp;nbsp;TkinterDnD&amp;nbsp;的根窗口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root&amp;nbsp;=&amp;nbsp;TkinterDnD.Tk()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;设置窗口图标，使用相对路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;假设&amp;nbsp;icon.ico&amp;nbsp;和&amp;nbsp;pptThumb.py&amp;nbsp;在同一目录下
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.iconbitmap(&amp;#39;icon.ico&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;设置图标时出错:&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.title(&amp;quot;PPT拼图批量生成工具&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.geometry(&amp;quot;800x500&amp;quot;)&amp;nbsp;&amp;nbsp;#&amp;nbsp;增大窗口宽度以适应表格

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;新增进度条和计数器相关变量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_var&amp;nbsp;=&amp;nbsp;IntVar()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.total_tasks&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.completed_tasks&amp;nbsp;=&amp;nbsp;0

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;界面组件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_frame&amp;nbsp;=&amp;nbsp;Frame(root)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_frame.pack(pady=5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_label&amp;nbsp;=&amp;nbsp;Label(self.dir_frame,&amp;nbsp;text=&amp;quot;请选择目录&amp;quot;,&amp;nbsp;width=40)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_label.pack(side=&amp;quot;left&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_btn&amp;nbsp;=&amp;nbsp;Button(self.dir_frame,&amp;nbsp;text=&amp;quot;选择目录&amp;quot;,&amp;nbsp;command=self.select_directory)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_btn.pack(side=&amp;quot;right&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_frame&amp;nbsp;=&amp;nbsp;Frame(root)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_frame.pack(pady=5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_label&amp;nbsp;=&amp;nbsp;Label(self.file_frame,&amp;nbsp;text=&amp;quot;请选择文件&amp;quot;,&amp;nbsp;width=40)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_label.pack(side=&amp;quot;left&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_btn&amp;nbsp;=&amp;nbsp;Button(self.file_frame,&amp;nbsp;text=&amp;quot;选择PPT文件&amp;quot;,&amp;nbsp;command=self.select_file)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_btn.pack(side=&amp;quot;right&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加Treeview控件替代Listbox
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns&amp;nbsp;=&amp;nbsp;(&amp;#39;selected_file&amp;#39;,&amp;nbsp;&amp;#39;status&amp;#39;,&amp;nbsp;&amp;#39;output_path&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree&amp;nbsp;=&amp;nbsp;Treeview(root,&amp;nbsp;columns=columns,&amp;nbsp;show=&amp;#39;headings&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.heading(&amp;#39;selected_file&amp;#39;,&amp;nbsp;text=&amp;#39;已选择的文件&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.heading(&amp;#39;status&amp;#39;,&amp;nbsp;text=&amp;#39;状态&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.heading(&amp;#39;output_path&amp;#39;,&amp;nbsp;text=&amp;#39;生成拼图路径&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.pack(pady=5,&amp;nbsp;fill=&amp;#39;x&amp;#39;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;绑定右键菜单
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.bind(&amp;quot;&amp;lt;Button-3&amp;gt;&amp;quot;,&amp;nbsp;self.show_context_menu)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;绑定&amp;nbsp;Ctrl&amp;nbsp;+&amp;nbsp;A&amp;nbsp;快捷键
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.bind(&amp;quot;&amp;lt;Control-a&amp;gt;&amp;quot;,&amp;nbsp;self.select_all_items)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;绑定拖拽事件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.drop_target_register(DND_FILES)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.dnd_bind(&amp;#39;&amp;lt;&amp;lt;Drop&amp;gt;&amp;gt;&amp;#39;,&amp;nbsp;self.on_drop)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;绑定&amp;nbsp;Delete&amp;nbsp;键事件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.bind(&amp;quot;&amp;lt;Delete&amp;gt;&amp;quot;,&amp;nbsp;self.remove_selected_item)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加进度条
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_bar&amp;nbsp;=&amp;nbsp;Progressbar(root,&amp;nbsp;variable=self.progress_var,&amp;nbsp;maximum=100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_bar.pack(pady=5,&amp;nbsp;fill=&amp;#39;x&amp;#39;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加任务计数器
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label&amp;nbsp;=&amp;nbsp;Label(root,&amp;nbsp;text=&amp;quot;0/0&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label.pack()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.process_btn&amp;nbsp;=&amp;nbsp;Button(root,&amp;nbsp;text=&amp;quot;生成拼图&amp;quot;,&amp;nbsp;command=self.process_files)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.process_btn.pack(pady=10)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label&amp;nbsp;=&amp;nbsp;Label(root,&amp;nbsp;text=&amp;quot;就绪&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label.pack()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;用于存储拖拽的文件路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dragged_files&amp;nbsp;=&amp;nbsp;[]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;修改&amp;nbsp;on_drag&amp;nbsp;方法
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;on_drag(self,&amp;nbsp;event):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;由于使用&amp;nbsp;tkinterdnd2，不再需要此方法，可以删除
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;on_drop(self,&amp;nbsp;event):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;获取拖放的文件路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_paths&amp;nbsp;=&amp;nbsp;event.data.split()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;file_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valid_files&amp;nbsp;=&amp;nbsp;[]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;file_path&amp;nbsp;in&amp;nbsp;file_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;os.path.isfile(file_path)&amp;nbsp;and&amp;nbsp;file_path.lower().endswith((&amp;#39;.pptx&amp;#39;,&amp;nbsp;&amp;#39;.ppt&amp;#39;,&amp;nbsp;&amp;#39;.ppsx&amp;#39;,&amp;nbsp;&amp;#39;.pps&amp;#39;)):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;valid_files.append(file_path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;valid_files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_names&amp;nbsp;=&amp;nbsp;[os.path.basename(path)&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;valid_files]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_label.config(text=&amp;quot;,&amp;nbsp;&amp;quot;.join(file_names)&amp;nbsp;if&amp;nbsp;len(file_names)&amp;nbsp;&amp;lt;&amp;nbsp;3&amp;nbsp;else&amp;nbsp;f&amp;quot;{len(file_names)}&amp;nbsp;个文件&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.selected_files&amp;nbsp;=&amp;nbsp;valid_files
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_label.config(text=&amp;quot;未选择目录&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;valid_files:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.insert(&amp;#39;&amp;#39;,&amp;nbsp;&amp;#39;end&amp;#39;,&amp;nbsp;values=(os.path.basename(path),&amp;nbsp;&amp;#39;待处理&amp;#39;,&amp;nbsp;&amp;#39;无&amp;#39;))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dragged_files&amp;nbsp;=&amp;nbsp;[]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;show_context_menu(self,&amp;nbsp;event):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context_menu&amp;nbsp;=&amp;nbsp;Menu(self.root,&amp;nbsp;tearoff=0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context_menu.add_command(label=&amp;quot;移除&amp;quot;,&amp;nbsp;command=self.remove_selected_item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context_menu.tk_popup(event.x_root,&amp;nbsp;event.y_root)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context_menu.grab_release()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;remove_selected_item(self,&amp;nbsp;event=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selected_item&amp;nbsp;=&amp;nbsp;self.tree.selection()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;selected_item:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;遍历选中的项目并逐个删除
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;selected_item:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.delete(item)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;select_all_items(self,&amp;nbsp;event=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;全选&amp;nbsp;Treeview&amp;nbsp;中的所有项目&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;all_items&amp;nbsp;=&amp;nbsp;self.tree.get_children()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;all_items:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.selection_add(item)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;select_directory(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dir_path&amp;nbsp;=&amp;nbsp;filedialog.askdirectory(title=&amp;quot;选择包含PPT文件的目录&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;dir_path:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_label.config(text=dir_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.selected_dir&amp;nbsp;=&amp;nbsp;dir_path
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_label.config(text=&amp;quot;请选择文件&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.delete(*self.tree.get_children())&amp;nbsp;&amp;nbsp;#&amp;nbsp;清空表格
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;遍历目录添加所有PPT文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;filename&amp;nbsp;in&amp;nbsp;os.listdir(self.selected_dir):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;filename.lower().endswith((&amp;#39;.pptx&amp;#39;,&amp;nbsp;&amp;#39;.ppt&amp;#39;,&amp;nbsp;&amp;#39;.ppsx&amp;#39;,&amp;nbsp;&amp;#39;.pps&amp;#39;)):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.insert(&amp;#39;&amp;#39;,&amp;nbsp;&amp;#39;end&amp;#39;,&amp;nbsp;values=(filename,&amp;nbsp;&amp;#39;待处理&amp;#39;,&amp;nbsp;&amp;#39;无&amp;#39;))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;select_file(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_paths&amp;nbsp;=&amp;nbsp;filedialog.askopenfilenames(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title=&amp;quot;选择PPT文件&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filetypes=[(&amp;quot;PPT&amp;nbsp;Files&amp;quot;,&amp;nbsp;&amp;quot;*.pptx&amp;nbsp;*.ppt&amp;nbsp;*.ppsx&amp;nbsp;*.pps&amp;quot;),&amp;nbsp;(&amp;quot;All&amp;nbsp;Files&amp;quot;,&amp;nbsp;&amp;quot;*&amp;quot;)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;file_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_names&amp;nbsp;=&amp;nbsp;[os.path.basename(path)&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;file_paths]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.file_label.config(text=&amp;quot;,&amp;nbsp;&amp;quot;.join(file_names)&amp;nbsp;if&amp;nbsp;len(file_names)&amp;nbsp;&amp;lt;&amp;nbsp;3&amp;nbsp;else&amp;nbsp;f&amp;quot;{len(file_names)}&amp;nbsp;个文件&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.selected_files&amp;nbsp;=&amp;nbsp;file_paths
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dir_label.config(text=&amp;quot;请选择目录&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.delete(*self.tree.get_children())&amp;nbsp;&amp;nbsp;#&amp;nbsp;清空表格
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;file_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.insert(&amp;#39;&amp;#39;,&amp;nbsp;&amp;#39;end&amp;#39;,&amp;nbsp;values=(os.path.basename(path),&amp;nbsp;&amp;#39;待处理&amp;#39;,&amp;nbsp;&amp;#39;无&amp;#39;))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;process_files(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;hasattr(self,&amp;nbsp;&amp;quot;selected_dir&amp;quot;):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;获取待处理的文件列表
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;files_to_process&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename&amp;nbsp;for&amp;nbsp;filename&amp;nbsp;in&amp;nbsp;os.listdir(self.selected_dir)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;filename.lower().endswith((&amp;#39;.pptx&amp;#39;,&amp;nbsp;&amp;#39;.ppt&amp;#39;,&amp;nbsp;&amp;#39;.ppsx&amp;#39;,&amp;nbsp;&amp;#39;.pps&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;过滤掉已移除的文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;displayed_files&amp;nbsp;=&amp;nbsp;[self.tree.item(item,&amp;nbsp;&amp;#39;values&amp;#39;)[0]&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;self.tree.get_children()]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;files_to_process&amp;nbsp;=&amp;nbsp;[f&amp;nbsp;for&amp;nbsp;f&amp;nbsp;in&amp;nbsp;files_to_process&amp;nbsp;if&amp;nbsp;f&amp;nbsp;in&amp;nbsp;displayed_files]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.total_tasks&amp;nbsp;=&amp;nbsp;len(files_to_process)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.completed_tasks&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_var.set(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label.config(text=f&amp;quot;{self.completed_tasks}/{self.total_tasks}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.process_directory(files_to_process)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;hasattr(self,&amp;nbsp;&amp;quot;selected_files&amp;quot;):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;过滤掉已移除的文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;displayed_files&amp;nbsp;=&amp;nbsp;[self.tree.item(item,&amp;nbsp;&amp;#39;values&amp;#39;)[0]&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;self.tree.get_children()]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.selected_files&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;self.selected_files
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;os.path.basename(path)&amp;nbsp;in&amp;nbsp;displayed_files
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.total_tasks&amp;nbsp;=&amp;nbsp;len(self.selected_files)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.completed_tasks&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_var.set(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label.config(text=f&amp;quot;{self.completed_tasks}/{self.total_tasks}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.process_multiple_files()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showwarning(&amp;quot;警告&amp;quot;,&amp;nbsp;&amp;quot;请先选择目录或文件&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;处理文件时发生错误:&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showerror(&amp;quot;错误&amp;quot;,&amp;nbsp;f&amp;quot;处理文件时发生错误:&amp;nbsp;{str(e)}&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;process_multiple_files(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label.config(text=&amp;quot;正在批量处理多个文件...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;self.tree.get_children():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path&amp;nbsp;=&amp;nbsp;self.tree.item(item,&amp;nbsp;&amp;#39;values&amp;#39;)[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;在处理前将状态更新为“正在生成”
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(file_path,&amp;nbsp;&amp;#39;正在生成&amp;#39;,&amp;nbsp;&amp;#39;无&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update_idletasks()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;找到对应的文件路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;full_path&amp;nbsp;=&amp;nbsp;next((path&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;self.selected_files&amp;nbsp;if&amp;nbsp;os.path.basename(path)&amp;nbsp;==&amp;nbsp;file_path),&amp;nbsp;None)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;full_path:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;开始处理文件:&amp;nbsp;{full_path}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_path&amp;nbsp;=&amp;nbsp;self.generate_mosaic(full_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(file_path,&amp;nbsp;&amp;#39;已完成&amp;#39;,&amp;nbsp;output_path))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;文件处理完成:&amp;nbsp;{full_path}，输出路径:&amp;nbsp;{output_path}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;处理失败:&amp;nbsp;{full_path}&amp;nbsp;-&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(file_path,&amp;nbsp;&amp;#39;失败&amp;#39;,&amp;nbsp;f&amp;#39;错误:&amp;nbsp;{str(e)}&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;每次处理完一个文件后更新界面
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.completed_tasks&amp;nbsp;+=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_var.set(int((self.completed_tasks&amp;nbsp;/&amp;nbsp;self.total_tasks)&amp;nbsp;*&amp;nbsp;100))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label.config(text=f&amp;quot;{self.completed_tasks}/{self.total_tasks}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update_idletasks()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showinfo(&amp;quot;完成&amp;quot;,&amp;nbsp;&amp;quot;多个文件处理完成！&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label.config(text=&amp;quot;就绪&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;批量处理多个文件时发生错误:&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showerror(&amp;quot;错误&amp;quot;,&amp;nbsp;f&amp;quot;批量处理多个文件时发生错误:&amp;nbsp;{str(e)}&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;process_directory(self,&amp;nbsp;files_to_process):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label.config(text=&amp;quot;正在批量处理...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;filename&amp;nbsp;in&amp;nbsp;files_to_process:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;找到当前文件名对应的&amp;nbsp;TreeView&amp;nbsp;中的&amp;nbsp;item
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item&amp;nbsp;=&amp;nbsp;None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;self.tree.get_children():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;self.tree.item(i,&amp;nbsp;&amp;#39;values&amp;#39;)[0]&amp;nbsp;==&amp;nbsp;filename:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item&amp;nbsp;=&amp;nbsp;i
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;item:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;在处理前将状态更新为“正在生成”
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(filename,&amp;nbsp;&amp;#39;正在生成&amp;#39;,&amp;nbsp;&amp;#39;无&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update_idletasks()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_path&amp;nbsp;=&amp;nbsp;os.path.join(self.selected_dir,&amp;nbsp;filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;开始处理文件:&amp;nbsp;{file_path}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_path&amp;nbsp;=&amp;nbsp;self.generate_mosaic(file_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(filename,&amp;nbsp;&amp;#39;已完成&amp;#39;,&amp;nbsp;output_path))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;文件处理完成:&amp;nbsp;{file_path}，输出路径:&amp;nbsp;{output_path}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;处理失败:&amp;nbsp;{filename}&amp;nbsp;-&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.tree.item(item,&amp;nbsp;values=(filename,&amp;nbsp;&amp;#39;失败&amp;#39;,&amp;nbsp;f&amp;#39;错误:&amp;nbsp;{str(e)}&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;每次处理完一个文件后更新界面
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.completed_tasks&amp;nbsp;+=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.progress_var.set(int((self.completed_tasks&amp;nbsp;/&amp;nbsp;self.total_tasks)&amp;nbsp;*&amp;nbsp;100))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.counter_label.config(text=f&amp;quot;{self.completed_tasks}/{self.total_tasks}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.root.update_idletasks()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showinfo(&amp;quot;完成&amp;quot;,&amp;nbsp;&amp;quot;批量处理完成！&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.status_label.config(text=&amp;quot;就绪&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;批量处理目录时发生错误:&amp;nbsp;{str(e)}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messagebox.showerror(&amp;quot;错误&amp;quot;,&amp;nbsp;f&amp;quot;批量处理目录时发生错误:&amp;nbsp;{str(e)}&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;generate_mosaic(self,&amp;nbsp;ppt_path):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TARGET_WIDTH&amp;nbsp;=&amp;nbsp;1200
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PADDING&amp;nbsp;=&amp;nbsp;4
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BG_COLOR&amp;nbsp;=&amp;nbsp;&amp;quot;#d3d3d3&amp;quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_dir&amp;nbsp;=&amp;nbsp;os.path.dirname(ppt_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ppt_name&amp;nbsp;=&amp;nbsp;os.path.splitext(os.path.basename(ppt_path))[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_path&amp;nbsp;=&amp;nbsp;os.path.join(output_dir,&amp;nbsp;f&amp;quot;{ppt_name}.jpg&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image_paths&amp;nbsp;=&amp;nbsp;self.export_ppt_slides(ppt_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;not&amp;nbsp;image_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;Exception(&amp;quot;无法导出PPT幻灯片&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;images&amp;nbsp;=&amp;nbsp;[Image.open(path)&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;image_paths]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cover_img&amp;nbsp;=&amp;nbsp;images[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cover_aspect&amp;nbsp;=&amp;nbsp;cover_img.width&amp;nbsp;/&amp;nbsp;cover_img.height
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;考虑两侧间距后调整封面图宽度
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cover_width&amp;nbsp;=&amp;nbsp;TARGET_WIDTH&amp;nbsp;-&amp;nbsp;2&amp;nbsp;*&amp;nbsp;PADDING
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cover_height&amp;nbsp;=&amp;nbsp;int(cover_width&amp;nbsp;/&amp;nbsp;cover_aspect)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cover_img&amp;nbsp;=&amp;nbsp;cover_img.resize((cover_width,&amp;nbsp;cover_height),&amp;nbsp;Image.LANCZOS)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_width&amp;nbsp;=&amp;nbsp;(TARGET_WIDTH&amp;nbsp;-&amp;nbsp;3&amp;nbsp;*&amp;nbsp;PADDING)&amp;nbsp;//&amp;nbsp;2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_imgs&amp;nbsp;=&amp;nbsp;[]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;img&amp;nbsp;in&amp;nbsp;images[1:]:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aspect&amp;nbsp;=&amp;nbsp;img.width&amp;nbsp;/&amp;nbsp;img.height
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_height&amp;nbsp;=&amp;nbsp;int(content_width&amp;nbsp;/&amp;nbsp;aspect)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resized_img&amp;nbsp;=&amp;nbsp;img.resize((content_width,&amp;nbsp;content_height),&amp;nbsp;Image.LANCZOS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_imgs.append(resized_img)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_rows&amp;nbsp;=&amp;nbsp;(len(content_imgs)&amp;nbsp;+&amp;nbsp;1)&amp;nbsp;//&amp;nbsp;2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row_height&amp;nbsp;=&amp;nbsp;content_imgs[0].height&amp;nbsp;if&amp;nbsp;content_imgs&amp;nbsp;else&amp;nbsp;0

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;修改总高度计算，加上最后一行下方的间距
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;total_height&amp;nbsp;=&amp;nbsp;(cover_img.height&amp;nbsp;+&amp;nbsp;PADDING&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content_rows&amp;nbsp;*&amp;nbsp;(row_height&amp;nbsp;+&amp;nbsp;PADDING)&amp;nbsp;+&amp;nbsp;PADDING)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mosaic&amp;nbsp;=&amp;nbsp;Image.new(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;RGB&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(TARGET_WIDTH,&amp;nbsp;total_height),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ImageColor.getrgb(BG_COLOR)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;放置封面图，考虑两侧间距
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mosaic.paste(cover_img,&amp;nbsp;(PADDING,&amp;nbsp;PADDING))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y_offset&amp;nbsp;=&amp;nbsp;cover_img.height&amp;nbsp;+&amp;nbsp;2&amp;nbsp;*&amp;nbsp;PADDING
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(0,&amp;nbsp;len(content_imgs),&amp;nbsp;2):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left_img&amp;nbsp;=&amp;nbsp;content_imgs[i]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mosaic.paste(left_img,&amp;nbsp;(PADDING,&amp;nbsp;y_offset))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1&amp;nbsp;&amp;lt;&amp;nbsp;len(content_imgs):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;right_img&amp;nbsp;=&amp;nbsp;content_imgs[i&amp;nbsp;+&amp;nbsp;1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;right_x&amp;nbsp;=&amp;nbsp;PADDING&amp;nbsp;+&amp;nbsp;content_width&amp;nbsp;+&amp;nbsp;PADDING
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mosaic.paste(right_img,&amp;nbsp;(right_x,&amp;nbsp;y_offset))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y_offset&amp;nbsp;+=&amp;nbsp;left_img.height&amp;nbsp;+&amp;nbsp;PADDING

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;检查最后一行是否有空白区域并填充白色
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;len(content_imgs)&amp;nbsp;%&amp;nbsp;2&amp;nbsp;==&amp;nbsp;1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_left_img&amp;nbsp;=&amp;nbsp;content_imgs[-1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算最后一行左侧图片的顶部&amp;nbsp;y&amp;nbsp;坐标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_y&amp;nbsp;=&amp;nbsp;cover_img.height&amp;nbsp;+&amp;nbsp;2&amp;nbsp;*&amp;nbsp;PADDING&amp;nbsp;+&amp;nbsp;(len(content_imgs)&amp;nbsp;//&amp;nbsp;2)&amp;nbsp;*&amp;nbsp;(last_left_img.height&amp;nbsp;+&amp;nbsp;PADDING)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;right_x&amp;nbsp;=&amp;nbsp;PADDING&amp;nbsp;+&amp;nbsp;content_width&amp;nbsp;+&amp;nbsp;PADDING
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算空白区域右下角的&amp;nbsp;y&amp;nbsp;坐标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bottom_y&amp;nbsp;=&amp;nbsp;last_y&amp;nbsp;+&amp;nbsp;last_left_img.height
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;draw&amp;nbsp;=&amp;nbsp;ImageDraw.Draw(mosaic)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;宽高分别减少&amp;nbsp;1px，右侧和底部间距调整为&amp;nbsp;4px
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;draw.rectangle([(right_x,&amp;nbsp;last_y),&amp;nbsp;(TARGET_WIDTH&amp;nbsp;-&amp;nbsp;PADDING&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;bottom_y&amp;nbsp;-&amp;nbsp;1)],&amp;nbsp;fill=&amp;quot;white&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;保存为&amp;nbsp;JPEG&amp;nbsp;格式并设置质量参数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mosaic.save(output_path,&amp;nbsp;&amp;#39;JPEG&amp;#39;,&amp;nbsp;quality=100)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;修正：设置图片时间为PPT修改时间（解决类型错误）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;import&amp;nbsp;win32file
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;import&amp;nbsp;win32con
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;import&amp;nbsp;pywintypes&amp;nbsp;&amp;nbsp;#&amp;nbsp;新增导入
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;import&amp;nbsp;datetime

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;获取PPT文件的最后修改时间戳（秒级）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ppt_mtime&amp;nbsp;=&amp;nbsp;os.path.getmtime(ppt_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;转换为&amp;nbsp;datetime&amp;nbsp;对象（本地时间）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mtime_datetime&amp;nbsp;=&amp;nbsp;datetime.datetime.fromtimestamp(ppt_mtime)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;转换为&amp;nbsp;Windows&amp;nbsp;文件时间对象（100纳秒为单位）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win_file_time&amp;nbsp;=&amp;nbsp;pywintypes.Time(mtime_datetime)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;打开图片文件（需要读/写权限才能修改属性）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hFile&amp;nbsp;=&amp;nbsp;win32file.CreateFile(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_path,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32con.GENERIC_READ&amp;nbsp;|&amp;nbsp;win32con.GENERIC_WRITE,&amp;nbsp;&amp;nbsp;#&amp;nbsp;修正权限为读写
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32con.FILE_SHARE_READ&amp;nbsp;|&amp;nbsp;win32con.FILE_SHARE_WRITE,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;None,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32con.OPEN_EXISTING,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32con.FILE_ATTRIBUTE_NORMAL,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;设置创建时间、修改时间、访问时间均为PPT的修改时间
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32file.SetFileTime(hFile,&amp;nbsp;win_file_time,&amp;nbsp;win_file_time,&amp;nbsp;win_file_time)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hFile.Close()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;ImportError:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;警告：未安装pywin32库，无法设置文件时间属性，请执行&amp;nbsp;pip&amp;nbsp;install&amp;nbsp;pywin32&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;设置文件时间失败:&amp;nbsp;{str(e)}&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;path&amp;nbsp;in&amp;nbsp;image_paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os.remove(path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;output_path

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;export_ppt_slides(self,&amp;nbsp;ppt_path):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;powerpoint&amp;nbsp;=&amp;nbsp;comtypes.client.CreateObject(&amp;quot;Powerpoint.Application&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;powerpoint.Visible&amp;nbsp;=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;powerpoint.WindowState&amp;nbsp;=&amp;nbsp;2

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deck&amp;nbsp;=&amp;nbsp;powerpoint.Presentations.Open(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os.path.abspath(ppt_path),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WithWindow=False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;temp_dir&amp;nbsp;=&amp;nbsp;tempfile.mkdtemp()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image_paths&amp;nbsp;=&amp;nbsp;[]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;deck.Slides.Count&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output_path&amp;nbsp;=&amp;nbsp;os.path.join(temp_dir,&amp;nbsp;f&amp;quot;slide_{i}.png&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deck.Slides[i].Export(output_path,&amp;nbsp;&amp;quot;PNG&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image_paths.append(output_path)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deck.Close()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;powerpoint.Quit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;image_paths

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;#39;powerpoint&amp;#39;&amp;nbsp;in&amp;nbsp;locals():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;powerpoint.Quit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;Exception(f&amp;quot;PPT导出失败:&amp;nbsp;{str(e)}&amp;quot;)

if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;quot;__main__&amp;quot;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;不需要再创建&amp;nbsp;Tk()&amp;nbsp;实例
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app&amp;nbsp;=&amp;nbsp;PPTMosaicApp(None)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.root.mainloop()&lt;/pre&gt;&lt;p&gt;[/orhide]&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2025-05-15&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- 发布v1.0；&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2025-06-30&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- 更新生成拼图时间与PPT文件时间一致；&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/ppt-tools.html&quot; target=&quot;_blank&quot;&gt;继续阅读《PPT拼图批量生成工具》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags:  | &lt;a href=&quot;https://www.toyean.com/post/ppt-tools.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/ppt-tools.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/202.html&quot;&gt;如何成为领导者  &lt;/a&gt; (2011-05-26)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/excel-insert-flash.html&quot;&gt;excel表里插入flash动画的解决方法&lt;/a&gt; (2012-05-02)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/milai.html&quot;&gt;所有人都喜欢米莱&lt;/a&gt; (2011-11-22)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/win7-photoshop-open.html&quot;&gt;win7下photoshop不能拖拽打开的解决方法&lt;/a&gt; (2012-07-05)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/194.html&quot;&gt;一个故事 说穿了 很多人&lt;/a&gt; (2011-05-13)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Thu, 15 May 2025 15:38:11 +0800</pubDate></item><item><title>Deepseek微信聊天机器人</title><link>https://www.toyean.com/post/deepseek-wechat-bot.html</link><description>&lt;p&gt;一段Python代码实现接入Deepseek与微信好友自动聊天的功能，将以下代码中按提示修改Deepseek的Key、微信好友备注名、微信群名称，运行前需要安装好Python环境（已安装可忽略），并在终端中提前下载openai和wxauto两个库：&lt;/p&gt;&lt;p&gt;终端运行命令：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;#&amp;nbsp;1、设置镜像源加速
pip&amp;nbsp;config&amp;nbsp;set&amp;nbsp;global.index-url&amp;nbsp;https://pypi.tuna.tsinghua.edu.cn/simple

#&amp;nbsp;2、安装openai库
pip&amp;nbsp;install&amp;nbsp;openai

#&amp;nbsp;3、安装wxauto库
pip&amp;nbsp;install&amp;nbsp;wxauto&lt;/pre&gt;&lt;p&gt;将以下Python代码保存为py文件，如main.py，放在任意不含中文的目录，鼠标右键目录空白处“在终端中打开”，执行以下命令：&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;python&amp;nbsp;main.py&lt;/pre&gt;&lt;p&gt;main.py 完整代码：&lt;/p&gt;&lt;p&gt;[loginhide]&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;from&amp;nbsp;openai&amp;nbsp;import&amp;nbsp;OpenAI
from&amp;nbsp;wxauto&amp;nbsp;import&amp;nbsp;WeChat
import&amp;nbsp;time

class&amp;nbsp;WeChatBot:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.client&amp;nbsp;=&amp;nbsp;OpenAI(api_key=&amp;quot;此处修改为Deepseek的APIKEY&amp;quot;,&amp;nbsp;base_url=&amp;quot;https://api.deepseek.com&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.wx&amp;nbsp;=&amp;nbsp;WeChat()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.listen_list&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;此处修改为微信好友的备注名，多个好友继续添加多行&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;或者群名，不需要群聊可删除该行&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;whoItem&amp;nbsp;in&amp;nbsp;self.listen_list:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.wx.AddListenChat(who=whoItem)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__ask(self,&amp;nbsp;msg):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;=&amp;nbsp;self.client.chat.completions.create(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model&amp;nbsp;=&amp;nbsp;&amp;quot;deepseek-chat&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;messages&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;quot;role&amp;quot;:&amp;nbsp;&amp;quot;system&amp;quot;,&amp;nbsp;&amp;quot;content&amp;quot;:&amp;nbsp;&amp;quot;你是一个情场高手，性格风趣幽默，你的任务是对话中让她对你产生好感，每段对话在20字左右&amp;quot;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;quot;role&amp;quot;:&amp;nbsp;&amp;quot;user&amp;quot;,&amp;nbsp;&amp;quot;content&amp;quot;:&amp;nbsp;msg}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream&amp;nbsp;=&amp;nbsp;False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;response.choices[0].message.content

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;run(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wait&amp;nbsp;=&amp;nbsp;2&amp;nbsp;#设置2秒查看一次是否有新消息
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_message&amp;nbsp;=&amp;nbsp;None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_message_time&amp;nbsp;=&amp;nbsp;None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msgs&amp;nbsp;=&amp;nbsp;self.wx.GetListenMessage()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;chat&amp;nbsp;in&amp;nbsp;msgs:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msg&amp;nbsp;=&amp;nbsp;msgs.get(chat)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;msg:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;item.type&amp;nbsp;==&amp;nbsp;&amp;#39;friend&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;last_message&amp;nbsp;!=&amp;nbsp;item.content&amp;nbsp;or&amp;nbsp;(last_message_time&amp;nbsp;and&amp;nbsp;time.time()&amp;nbsp;-&amp;nbsp;last_message_time&amp;nbsp;&amp;gt;&amp;nbsp;60):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reply&amp;nbsp;=&amp;nbsp;self.__ask(item.content)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;接收【{item.sender}】的消息：{item.content}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;回复【{item.sender}】的消息：{reply}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chat.SendMsg(reply)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_message&amp;nbsp;=&amp;nbsp;item.content
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last_message_time&amp;nbsp;=&amp;nbsp;time.time()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(wait)

if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bot&amp;nbsp;=&amp;nbsp;WeChatBot()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bot.run()&lt;/pre&gt;&lt;p&gt;[/loginhide]&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-wechat-bot.html&quot; target=&quot;_blank&quot;&gt;继续阅读《Deepseek微信聊天机器人》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags: &lt;a href=&quot;https://www.toyean.com/tags-132.html&quot;&gt;AI大模型&lt;/a&gt;， | &lt;a href=&quot;https://www.toyean.com/post/deepseek-wechat-bot.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-wechat-bot.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-img.html&quot;&gt;deepseek生图指令&lt;/a&gt; (2025-03-04)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/auto-post-tencent-cloud-lke.html&quot;&gt;使用Python自动抓取zblog文章到腾讯云大模型知识引擎LKE，投喂数据专属化自己的知识库&lt;/a&gt; (2025-03-04)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Mon, 24 Mar 2025 14:50:43 +0800</pubDate></item><item><title>使用Python自动抓取zblog文章到腾讯云大模型知识引擎LKE，投喂数据专属化自己的知识库</title><link>https://www.toyean.com/post/auto-post-tencent-cloud-lke.html</link><description>&lt;p&gt;首先登录腾讯云大模型知识引擎LKE创建应用，获取大模型应用ID、腾讯云账号的SecretID和SecretKey。&lt;/p&gt;&lt;p&gt;在网站当前使用的主题目录下创建plugin/ai目录，以zblog自带的default主题为例创建目录结构，如：zb_users/theme/default/plugin/ai/&lt;/p&gt;&lt;p&gt;在ai目录中创建getPost.php，代码如下：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
require&amp;nbsp;&amp;#39;../../../../../zb_system/function/c_system_base.php&amp;#39;;
require&amp;nbsp;&amp;#39;../../../../../zb_system/function/c_system_admin.php&amp;#39;;
$zbp-&amp;gt;Load();

//安全起见设置一个密码变量，非密码访问时自动重定向到首页
$password&amp;nbsp;=&amp;nbsp;&amp;#39;123456&amp;#39;;
if(GetVars(&amp;#39;act&amp;#39;,&amp;#39;GET&amp;#39;)&amp;nbsp;!=&amp;nbsp;$password){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header(&amp;quot;Location:&amp;nbsp;&amp;quot;.$zbp-&amp;gt;host.&amp;quot;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;die();
}
if($zbp-&amp;gt;option[&amp;#39;ZC_STATIC_MODE&amp;#39;]&amp;nbsp;==&amp;nbsp;&amp;#39;REWRITE&amp;#39;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$p=new&amp;nbsp;Pagebar(&amp;#39;./getPost.php?act=123456&amp;amp;p={%page%}&amp;amp;c={随笔}&amp;#39;,false);
}else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$p=new&amp;nbsp;Pagebar(&amp;#39;./getPost.php&amp;amp;act=123456&amp;amp;p={%page%}&amp;amp;c={随笔}&amp;#39;,false);
}
$p-&amp;gt;PageCount&amp;nbsp;=&amp;nbsp;50;&amp;nbsp;//每页文章数量
$p-&amp;gt;PageNow&amp;nbsp;=&amp;nbsp;(int)GetVars(&amp;#39;p&amp;#39;,&amp;#39;GET&amp;#39;)&amp;nbsp;==&amp;nbsp;0&amp;nbsp;?&amp;nbsp;1&amp;nbsp;:&amp;nbsp;(int)GetVars(&amp;#39;p&amp;#39;,&amp;#39;GET&amp;#39;);
$p-&amp;gt;PageBarCount&amp;nbsp;=&amp;nbsp;$zbp-&amp;gt;pagebarcount;
$p-&amp;gt;UrlRule-&amp;gt;Rules[&amp;#39;{随笔}&amp;#39;]&amp;nbsp;=&amp;nbsp;GetVars(&amp;#39;c&amp;#39;);
$w&amp;nbsp;=&amp;nbsp;array();
$w[]&amp;nbsp;=&amp;nbsp;array(&amp;#39;=&amp;#39;,&amp;#39;log_Status&amp;#39;,0);
if(GetVars(&amp;#39;c&amp;#39;)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$w[]=array(&amp;#39;=&amp;#39;,&amp;#39;log_CateID&amp;#39;,GetVars(&amp;#39;c&amp;#39;));
}
$s&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
$or&amp;nbsp;=&amp;nbsp;array(&amp;#39;log_PostTime&amp;#39;=&amp;gt;&amp;#39;DESC&amp;#39;);
$l&amp;nbsp;=&amp;nbsp;array(($p-&amp;gt;PageNow-1)&amp;nbsp;*&amp;nbsp;$p-&amp;gt;PageCount,$p-&amp;gt;PageCount);
$op&amp;nbsp;=&amp;nbsp;array(&amp;#39;pagebar&amp;#39;=&amp;gt;$p);
$array&amp;nbsp;=&amp;nbsp;$zbp-&amp;gt;GetArticleList($s,$w,$or,$l,$op,false);
if(GetVars(&amp;#39;c&amp;#39;)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ca&amp;nbsp;=&amp;nbsp;GetVars(&amp;#39;c&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(isset($zbp-&amp;gt;categorys[(int)$ca]-&amp;gt;Name)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;h3&amp;gt;以下是关于&amp;#39;&amp;nbsp;.$zbp-&amp;gt;categorys[(int)$ca]-&amp;gt;Name.&amp;nbsp;&amp;#39;的内容！&amp;lt;/h3&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
if($array){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$article)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$comm_Content&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($article-&amp;gt;Status==0){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$introsource&amp;nbsp;=&amp;nbsp;$article-&amp;gt;Content;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$intro&amp;nbsp;=&amp;nbsp;TransferHTML($introsource,&amp;#39;[nohtml]&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;文章标题：&amp;#39;.$article-&amp;gt;Title.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;文章内容：&amp;#39;.$intro.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;------&amp;lt;br&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;div&amp;nbsp;class=&amp;quot;pagebar&amp;quot;&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($p-&amp;gt;buttons&amp;nbsp;as&amp;nbsp;$k&amp;nbsp;=&amp;gt;&amp;nbsp;$v){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($p-&amp;gt;PageNow&amp;nbsp;==&amp;nbsp;$k){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;span&amp;nbsp;class=&amp;quot;now-page&amp;quot;&amp;gt;&amp;#39;.$k.&amp;#39;&amp;lt;/span&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}elseif($p-&amp;gt;PageNow+1&amp;nbsp;==&amp;nbsp;$k){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;a&amp;nbsp;href=&amp;quot;&amp;#39;.$v.&amp;#39;&amp;quot;&amp;nbsp;class=&amp;quot;next-page&amp;quot;&amp;gt;&amp;#39;.$k.&amp;#39;&amp;lt;/a&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;a&amp;nbsp;href=&amp;quot;&amp;#39;.$v.&amp;#39;&amp;quot;&amp;gt;&amp;#39;.$k.&amp;#39;&amp;lt;/a&amp;gt;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;/div&amp;gt;&amp;#39;;
}else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;#39;&amp;lt;div&amp;nbsp;class=&amp;quot;mynull&amp;quot;&amp;gt;&amp;lt;p&amp;gt;没有查询到数据！&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;;
}&lt;/pre&gt;&lt;p&gt;以上地址支持生成指定分类下的文章：如getPost.php?act=123456&amp;amp;c=8，（8为分类ID，不填写&amp;amp;c=分类ID时，则获取全站所有公开的文章内容）&lt;/p&gt;&lt;p&gt;在zblog网站根目录创建python文件getPost.py，代码如下：&lt;/p&gt;&lt;p&gt;[loginhide]&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;import&amp;nbsp;urllib.request
import&amp;nbsp;re
import&amp;nbsp;os

def&amp;nbsp;find_pattern_in_string(input_string,&amp;nbsp;pattern):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;使用正则表达式查找给定字符串中的内容。

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;input_string&amp;nbsp;(str):&amp;nbsp;要查找的字符串。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pattern&amp;nbsp;(str):&amp;nbsp;正则表达式模式。

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list:&amp;nbsp;匹配到的内容列表。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;编译正则表达式模式
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regex&amp;nbsp;=&amp;nbsp;re.compile(pattern)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;查找所有匹配项
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matches&amp;nbsp;=&amp;nbsp;regex.findall(input_string)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;matches

def&amp;nbsp;replaceWithRE(A1,&amp;nbsp;A2,&amp;nbsp;content):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;A1=r&amp;#39;outputs\[(.*)\]-&amp;gt;getValue\(\)&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;A2=r&amp;#39;outputs[\1].SignalName&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;replaceWithRE(A1,A2,content);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pattern&amp;nbsp;=&amp;nbsp;re.compile(A1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new_content&amp;nbsp;=&amp;nbsp;pattern.sub(A2,&amp;nbsp;content)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;new_content

#&amp;nbsp;要下载的网页URL
url&amp;nbsp;=&amp;nbsp;&amp;#39;此处替换为域名/zb_users/theme/此处替换为主题ID/plugin/ai/getPost.php?act=123456&amp;#39;
#&amp;nbsp;发送HTTP&amp;nbsp;GET请求并获取响应
response&amp;nbsp;=&amp;nbsp;urllib.request.urlopen(url)
#&amp;nbsp;读取响应内容（HTML）
html_content&amp;nbsp;=&amp;nbsp;response.read().decode(&amp;#39;utf-8&amp;#39;)
sample_text&amp;nbsp;=&amp;nbsp;html_content
#&amp;nbsp;打印网页内容的前100个字符（为了示例简洁）
print(sample_text)
#&amp;nbsp;获取页面数量
pages&amp;nbsp;=&amp;nbsp;find_pattern_in_string(sample_text,&amp;nbsp;&amp;quot;(?&amp;lt;=act\=123456\&amp;amp;amp;p\=)\d+(?=\&amp;quot;\&amp;gt;\›\›\&amp;lt;\/a\&amp;gt;\&amp;lt;\/div\&amp;gt;)&amp;quot;)
#&amp;nbsp;检查&amp;nbsp;pages&amp;nbsp;列表是否为空
if&amp;nbsp;pages:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pages&amp;nbsp;=&amp;nbsp;int(pages[0])
else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;如果列表为空，设置默认值为&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pages&amp;nbsp;=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;未找到页面数量，默认设置为&amp;nbsp;1。&amp;quot;)

print(pages)
allPagesContent&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;quot;
for&amp;nbsp;ii&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;pages&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;&amp;quot;此处替换为域名/zb_users/theme/此处替换为主题ID/plugin/ai/getPost.php?act=123456&amp;amp;p=&amp;quot;&amp;nbsp;+&amp;nbsp;str(ii)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;发送HTTP&amp;nbsp;GET请求并获取响应
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;=&amp;nbsp;urllib.request.urlopen(url)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;读取响应内容（HTML）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html_content&amp;nbsp;=&amp;nbsp;response.read().decode(&amp;#39;utf-8&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sample_text&amp;nbsp;=&amp;nbsp;html_content
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;打印网页内容的前100个字符（为了示例简洁）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sample_text&amp;nbsp;=&amp;nbsp;replaceWithRE(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;,&amp;nbsp;&amp;quot;\n&amp;quot;,&amp;nbsp;sample_text)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sample_text&amp;nbsp;=&amp;nbsp;replaceWithRE(&amp;quot;&amp;lt;div&amp;nbsp;class=.*&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,&amp;nbsp;&amp;quot;&amp;nbsp;&amp;quot;,&amp;nbsp;sample_text)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;allPagesContent&amp;nbsp;=&amp;nbsp;allPagesContent&amp;nbsp;+&amp;nbsp;sample_text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;print(sample_text)
print(allPagesContent)

#&amp;nbsp;获取当前脚本文件所在的目录
script_dir&amp;nbsp;=&amp;nbsp;os.path.dirname(os.path.abspath(__file__))
#&amp;nbsp;构建&amp;nbsp;output.txt&amp;nbsp;文件的完整路径
output_file_path&amp;nbsp;=&amp;nbsp;os.path.join(script_dir,&amp;nbsp;&amp;#39;output.txt&amp;#39;)

with&amp;nbsp;open(output_file_path,&amp;nbsp;&amp;#39;w&amp;#39;,&amp;nbsp;encoding=&amp;#39;utf-8&amp;#39;)&amp;nbsp;as&amp;nbsp;file:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;将字符串写入文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.write(allPagesContent)&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;[/loginhide]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;在zblog根目录创建postLKE.py文件，实现将getPost.py生成的output.txt文章内容，离线提交到腾讯云大模型知识引擎，首次运行前需安装所需的库，命令如下：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;pip3&amp;nbsp;install&amp;nbsp;cos-python-sdk-v5&lt;/pre&gt;&lt;p&gt;postLKE.py文件代码如下：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;#&amp;nbsp;-*-&amp;nbsp;coding:&amp;nbsp;utf-8&amp;nbsp;-*-
import&amp;nbsp;json
import&amp;nbsp;os
&amp;nbsp;
from&amp;nbsp;pathlib&amp;nbsp;import&amp;nbsp;Path
from&amp;nbsp;tencentcloud.common.common_client&amp;nbsp;import&amp;nbsp;CommonClient
from&amp;nbsp;tencentcloud.common&amp;nbsp;import&amp;nbsp;credential
from&amp;nbsp;tencentcloud.common.exception.tencent_cloud_sdk_exception&amp;nbsp;import&amp;nbsp;TencentCloudSDKException
from&amp;nbsp;tencentcloud.common.profile.client_profile&amp;nbsp;import&amp;nbsp;ClientProfile
from&amp;nbsp;tencentcloud.common.profile.http_profile&amp;nbsp;import&amp;nbsp;HttpProfile
from&amp;nbsp;qcloud_cos&amp;nbsp;import&amp;nbsp;CosConfig
from&amp;nbsp;qcloud_cos&amp;nbsp;import&amp;nbsp;CosS3Client
&amp;nbsp;
EndPoint&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;lke.tencentcloudapi.com&amp;quot;
SecretID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;此处替换为腾讯云账号的SecretID&amp;quot;
SecretKey&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;此处替换为腾讯云账号的SecretKey&amp;quot;
BotBizID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;此处替换为大模型应用ID（进入模型配置页的Url可查看appid=****星号即为应用ID）&amp;quot;
TypeKeyRealtime&amp;nbsp;=&amp;nbsp;&amp;quot;realtime&amp;quot;&amp;nbsp;#&amp;nbsp;实时文件上传类型
TypeKeyOffline&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;offline&amp;quot;&amp;nbsp;&amp;nbsp;#&amp;nbsp;离线文档上传类型
Region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;quot;ap-guangzhou&amp;quot;
&amp;nbsp;
filePath&amp;nbsp;=&amp;nbsp;&amp;quot;./output.txt&amp;quot;
fileName&amp;nbsp;=&amp;nbsp;Path(filePath).name
fileExt&amp;nbsp;=&amp;nbsp;Path(filePath).suffix[1:]
print(&amp;quot;filePath:&amp;nbsp;&amp;quot;,filePath)
print(&amp;quot;fileName:&amp;nbsp;&amp;quot;,fileName)
print(&amp;quot;fileExt:&amp;nbsp;&amp;quot;,fileExt)

&amp;nbsp;
########&amp;nbsp;step&amp;nbsp;1&amp;nbsp;获取临时密钥&amp;nbsp;###########
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cred&amp;nbsp;=&amp;nbsp;credential.Credential(SecretID,&amp;nbsp;SecretKey)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpProfile&amp;nbsp;=&amp;nbsp;HttpProfile()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpProfile.endpoint&amp;nbsp;=&amp;nbsp;EndPoint
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clientProfile&amp;nbsp;=&amp;nbsp;ClientProfile()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clientProfile.httpProfile&amp;nbsp;=&amp;nbsp;httpProfile
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;请注意，此处为离线文档上传，TypeKey取值为offline;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;如果需要复用此处代码上传实时文档，需要修改TypeKey取值为&amp;nbsp;realtime
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;BotBizId&amp;quot;:&amp;nbsp;BotBizID,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;FileType&amp;quot;:&amp;nbsp;fileExt,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;IsPublic&amp;quot;:&amp;nbsp;False,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;TypeKey&amp;quot;:&amp;nbsp;TypeKeyOffline
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;&amp;quot;TypeKey&amp;quot;:&amp;nbsp;&amp;quot;offline&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;common_client&amp;nbsp;=&amp;nbsp;CommonClient(&amp;quot;lke&amp;quot;,&amp;nbsp;&amp;quot;2023-11-30&amp;quot;,&amp;nbsp;cred,&amp;nbsp;Region,&amp;nbsp;profile=clientProfile)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp&amp;nbsp;=&amp;nbsp;common_client.call_json(&amp;quot;DescribeStorageCredential&amp;quot;,&amp;nbsp;params)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpSecretId&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;Credentials&amp;#39;][&amp;#39;TmpSecretId&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpSecretKey&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;Credentials&amp;#39;][&amp;#39;TmpSecretKey&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpToken&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;Credentials&amp;#39;][&amp;#39;Token&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uploadPath&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;UploadPath&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bucket&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;Bucket&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;region&amp;nbsp;=&amp;nbsp;resp[&amp;#39;Response&amp;#39;][&amp;#39;Region&amp;#39;]
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;========&amp;nbsp;DescribeStorageCredential&amp;nbsp;Success&amp;nbsp;=======&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;tmpSecretId:&amp;nbsp;&amp;quot;,&amp;nbsp;tmpSecretId)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;tmpSecretKey:&amp;nbsp;&amp;quot;,&amp;nbsp;tmpSecretKey)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;tmpToken:&amp;nbsp;&amp;quot;,&amp;nbsp;tmpToken)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;uploadPath:&amp;nbsp;&amp;quot;,&amp;nbsp;uploadPath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;bucket:&amp;nbsp;&amp;quot;,&amp;nbsp;bucket)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;region:&amp;nbsp;&amp;quot;,&amp;nbsp;region)
except&amp;nbsp;TencentCloudSDKException&amp;nbsp;as&amp;nbsp;err:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(err)
&amp;nbsp;

print(&amp;quot;=======&amp;nbsp;获取临时密钥成功&amp;nbsp;=============\n\n&amp;quot;)
&amp;nbsp;
&amp;nbsp;
########&amp;nbsp;step&amp;nbsp;2&amp;nbsp;上传文档到知识引擎的cos&amp;nbsp;###########
#&amp;nbsp;参考：https://cloud.tencent.com/document/product/436/14113
config&amp;nbsp;=&amp;nbsp;CosConfig(Region=Region,&amp;nbsp;SecretId=tmpSecretId,&amp;nbsp;SecretKey=tmpSecretKey,&amp;nbsp;Token=tmpToken,&amp;nbsp;Scheme=&amp;#39;https&amp;#39;)
client&amp;nbsp;=&amp;nbsp;CosS3Client(config)
#&amp;nbsp;使用高级接口上传一次，不重试，此时没有使用断点续传的功能
response&amp;nbsp;=&amp;nbsp;client.upload_file(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bucket=bucket,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Key=uploadPath,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LocalFilePath=fileName,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EnableMD5=False,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;progress_callback=None
)
&amp;nbsp;
print(&amp;#39;上传后结果:&amp;#39;&amp;nbsp;+&amp;nbsp;str(response))
rsp&amp;nbsp;=&amp;nbsp;response
eTag&amp;nbsp;=&amp;nbsp;rsp.get(&amp;#39;ETag&amp;#39;)
cosHash&amp;nbsp;=&amp;nbsp;rsp.get(&amp;#39;x-cos-hash-crc64ecma&amp;#39;)
print(&amp;#39;etag:&amp;nbsp;&amp;#39;&amp;nbsp;+&amp;nbsp;eTag)
print(&amp;#39;coshash:&amp;nbsp;&amp;#39;&amp;nbsp;+&amp;nbsp;cosHash)
print(&amp;quot;&amp;nbsp;\n\n&amp;nbsp;==============&amp;nbsp;\n\n&amp;quot;)
&amp;nbsp;
&amp;nbsp;
#########&amp;nbsp;step&amp;nbsp;3&amp;nbsp;从cos转存到知识引擎&amp;nbsp;###########
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;BotBizId&amp;quot;:&amp;nbsp;BotBizID,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;FileName&amp;quot;:&amp;nbsp;fileName,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;FileType&amp;quot;:&amp;nbsp;fileExt,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;CosUrl&amp;quot;:&amp;nbsp;uploadPath,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;ETag&amp;quot;:&amp;nbsp;eTag,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;CosHash&amp;quot;:&amp;nbsp;cosHash,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Size&amp;quot;:&amp;nbsp;str(os.path.getsize(fileName)),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;AttrRange&amp;quot;:&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cred&amp;nbsp;=&amp;nbsp;credential.Credential(SecretID,&amp;nbsp;SecretKey)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpProfile&amp;nbsp;=&amp;nbsp;HttpProfile()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpProfile.endpoint&amp;nbsp;=&amp;nbsp;EndPoint
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clientProfile&amp;nbsp;=&amp;nbsp;ClientProfile()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clientProfile.httpProfile&amp;nbsp;=&amp;nbsp;httpProfile
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;common_client&amp;nbsp;=&amp;nbsp;CommonClient(&amp;quot;lke&amp;quot;,&amp;nbsp;&amp;quot;2023-11-30&amp;quot;,&amp;nbsp;cred,&amp;nbsp;Region,&amp;nbsp;profile=clientProfile)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp&amp;nbsp;=&amp;nbsp;common_client.call_json(&amp;quot;SaveDoc&amp;quot;,&amp;nbsp;params)
except&amp;nbsp;TencentCloudSDKException&amp;nbsp;as&amp;nbsp;err:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(err)&lt;/pre&gt;&lt;p&gt;至此，以上三个文件即可实现python自动抓取zblog文章并离线提交到腾讯云大模型知识引擎，使用方法如下：&lt;/p&gt;&lt;p&gt;在宝塔面板中进入左侧的计划任务，创建两个任务，分别为“自动创建知识库TXT”和“自动提交知识库TXT”。&lt;/p&gt;&lt;p&gt;任务一：自动创建知识库TXT（任务类型：Shell脚本，任务名称：自动创建知识库TXT，执行周期：每周-周一-0小时-0分钟，执行用户：默认root，脚本内容：/www/server/panel/pyenv/bin/python3 -u /www/wwwroot/网站名/getPost.py）;&lt;/p&gt;&lt;p&gt;任务二：自动提交知识库TXT&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;（任务类型：Shell脚本，任务名称：&lt;/span&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;自动提交知识库TXT，执行周期：每周-周一-2小时-0分钟，执行用户：默认root，脚本内容：&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;python3 -u /www/wwwroot/网站名/&lt;/span&gt;postLKE.py&lt;/span&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;）;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;可根据您的情况自行设定任务执行的周期，提交到腾讯云大模型知识引擎LKE后，即可让大模型依据提交的文章自动学习了。&lt;/p&gt;&lt;p&gt;注：&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;大模型知识库支持3000000字符容量，提交的文章内容字符不要超过模型的限制，且&lt;/span&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;需要在大模型学习后，手动点击发布按钮，将大模型发布就能投入使用了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/auto-post-tencent-cloud-lke.html&quot; target=&quot;_blank&quot;&gt;继续阅读《使用Python自动抓取zblog文章到腾讯云大模型知识引擎LKE，投喂数据专属化自己的知识库》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags: &lt;a href=&quot;https://www.toyean.com/tags-132.html&quot;&gt;AI大模型&lt;/a&gt;， | &lt;a href=&quot;https://www.toyean.com/post/auto-post-tencent-cloud-lke.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/auto-post-tencent-cloud-lke.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-wechat-bot.html&quot;&gt;Deepseek微信聊天机器人&lt;/a&gt; (2025-03-24)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-img.html&quot;&gt;deepseek生图指令&lt;/a&gt; (2025-03-04)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Tue, 04 Mar 2025 11:07:19 +0800</pubDate></item><item><title>deepseek生图指令</title><link>https://www.toyean.com/post/deepseek-img.html</link><description>&lt;p&gt;在deepseek对话窗口输入以下指令即可进入生图模式：&lt;br/&gt;&lt;/p&gt;&lt;p&gt;[loginhide]&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-markup&quot;&gt;INPUT&amp;nbsp;=&amp;nbsp;{focus}
OUTPUT&amp;nbsp;=&amp;nbsp;{description}&amp;nbsp;\n&amp;nbsp;![IMG](https://image.pollinations.ai/prompt/{description}?enhance=true&amp;amp;private=true&amp;amp;nologo=true&amp;amp;safe=true&amp;amp;model=flux)
{description}&amp;nbsp;=&amp;nbsp;{foucsDetailed},&amp;nbsp;%20{adjective1},%20{adjective2},%20{visualStyle1},%20{visualStyle2},%20{visualStyle3},%20{artisReference}
OUTPUT&amp;nbsp;=&amp;nbsp;A&amp;nbsp;Siamese&amp;nbsp;cat&amp;nbsp;gracefull&amp;nbsp;curls&amp;nbsp;up&amp;nbsp;in&amp;nbsp;the&amp;nbsp;rooftop&amp;nbsp;garden&amp;nbsp;shrouded&amp;nbsp;in&amp;nbsp;neon&amp;nbsp;lights,%20&amp;nbsp;with&amp;nbsp;mysterious&amp;nbsp;and&amp;nbsp;profound&amp;nbsp;emerald-coloredeyes,&amp;nbsp;%20&amp;nbsp;soft&amp;nbsp;and&amp;nbsp;fluffy&amp;nbsp;silver-gray&amp;nbsp;fur,%20&amp;nbsp;a&amp;nbsp;futuristic&amp;nbsp;vertical&amp;nbsp;cityscape,&amp;nbsp;%20&amp;nbsp;thesense&amp;nbsp;of&amp;nbsp;an&amp;nbsp;animated&amp;nbsp;movie&amp;nbsp;shot,&amp;nbsp;%20&amp;nbsp;the&amp;nbsp;curves&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Art&amp;nbsp;Nouveau&amp;nbsp;movement,&amp;nbsp;%20&amp;nbsp;a&amp;nbsp;mixed&amp;nbsp;styie&amp;nbsp;of&amp;nbsp;HayaoMiyazaki&amp;nbsp;![IMG](https://image.pollinations.ai/prompt/……)
真实摄影，一只可爱的猫蜷缩在窗台，白色透明窗帘，清晨，微风&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;[/loginhide]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: center;&quot;&gt;进入生图模式后，不必再重复输入以上代码，直接填写中文提示词，就能一直出图了，不用开启深度思考和联网搜索。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.toyean.com/zb_users/upload/2025/03/202503041741056828256487.png&quot; title=&quot;未标题-2.png&quot; alt=&quot;未标题-2.png&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt; ©Copyright Birdol.Com 2006-2014.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-img.html&quot; target=&quot;_blank&quot;&gt;继续阅读《deepseek生图指令》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 随笔 | Tags: &lt;a href=&quot;https://www.toyean.com/tags-132.html&quot;&gt;AI大模型&lt;/a&gt;， | &lt;a href=&quot;https://www.toyean.com/post/deepseek-img.html#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-img.html#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;相关文章:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/auto-post-tencent-cloud-lke.html&quot;&gt;使用Python自动抓取zblog文章到腾讯云大模型知识引擎LKE，投喂数据专属化自己的知识库&lt;/a&gt; (2025-03-04)  &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.toyean.com/post/deepseek-wechat-bot.html&quot;&gt;Deepseek微信聊天机器人&lt;/a&gt; (2025-03-24)  &lt;/li&gt;&lt;/ul&gt;&lt;a target=&quot;_blank&quot; title=&quot;阿里云优惠&quot; href=&quot;http://www.birdol.com/redirect/?s=6&quot;&gt;&lt;img alt=&quot;Z-Blog&quot; src=&quot;http://www.birdol.com/aliyun/qingdao950x90.jpg&quot;&gt;&lt;/a&gt;</description><pubDate>Tue, 04 Mar 2025 10:31:29 +0800</pubDate></item></channel></rss><!--152.68 ms , 24 query , 2255kb memory , 0 error-->