<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on MaxBlog</title><link>https://blogtypecho.maxtrnn.top/tags/python/</link><description>Recent content in Python on MaxBlog</description><generator>Hugo</generator><language>zh-cn</language><copyright>&lt;a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener"&gt;皖ICP备2024056272号-3&lt;/a&gt;</copyright><lastBuildDate>Thu, 24 Sep 2026 07:39:59 +0000</lastBuildDate><atom:link href="https://blogtypecho.maxtrnn.top/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>图书馆自动预约</title><link>https://blogtypecho.maxtrnn.top/post/ahnu-library-automatic-appointment-zcvsv3/</link><pubDate>Fri, 03 Jan 2025 05:47:00 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/ahnu-library-automatic-appointment-zcvsv3/</guid><description>&lt;h1 id="图书馆自动预约"&gt;图书馆自动预约&lt;/h1&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;2024年 结束了 2025 我们一定会过的更好的&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;max的驱动力是懒，使用懒得争分夺秒的去抢图书馆的座位，但是为什么还是约不到呢？&lt;/p&gt;&#10;&lt;p&gt;为了更大化展现计算机人的能力，上脚本！&lt;/p&gt;&#10;&lt;p&gt;但是我又不会爬虫怎么办呢？&lt;/p&gt;&#10;&lt;p&gt;去github看一看&lt;/p&gt;&#10;&lt;p&gt;根据已知信息 前图书馆预约项目的“负责人” 告诉我这个是超星学习通的图书馆预约框架&lt;/p&gt;&#10;&lt;p&gt;so 搜索超星图书馆预约 学习通图书馆&lt;/p&gt;&#10;&lt;p&gt;得到结论：&lt;a href="https://github.com/bear-zd/ChaoXingReserveSeat"&gt;https://github.com/bear-zd/ChaoXingReserveSeat&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;前去下载观察：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; time&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; argparse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; os&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; logging&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;basicConfig(level&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;INFO, &lt;span style="color:#8be9fd;font-style:italic"&gt;format&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(asctime)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; - &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(levelname)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; - &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(message)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;from&lt;/span&gt; utils &lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; reserve, get_user_credentials&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;get_current_time &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;lambda&lt;/span&gt; action: time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%H:%M:%S&amp;#34;&lt;/span&gt;, time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;localtime(time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;time() &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;8&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;3600&lt;/span&gt;)) &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%H:%M:%S&amp;#34;&lt;/span&gt;, time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;localtime(time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;time()))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;get_current_dayofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;lambda&lt;/span&gt; action: time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt;, time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;localtime(time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;time() &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;8&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;3600&lt;/span&gt;)) &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%A&amp;#34;&lt;/span&gt;, time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;localtime(time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;time()))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SLEEPTIME &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0.2&lt;/span&gt; &lt;span style="color:#6272a4"&gt;# 每次抢座的间隔&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ENDTIME &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#34;07:01:00&amp;#34;&lt;/span&gt; &lt;span style="color:#6272a4"&gt;# 根据学校的预约座位时间+1min即可&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ENABLE_SLIDER &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;False&lt;/span&gt; &lt;span style="color:#6272a4"&gt;# 是否有滑块验证&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MAX_ATTEMPT &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;5&lt;/span&gt; &lt;span style="color:#6272a4"&gt;# 最大尝试次数&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;RESERVE_NEXT_DAY &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;False&lt;/span&gt; &lt;span style="color:#6272a4"&gt;# 预约明天而不是今天的&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;login_and_reserve&lt;/span&gt;(users, usernames, passwords, action, success_list&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;None&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;Global settings: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;SLEEPTIME: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;SLEEPTIME&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;ENDTIME: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;ENDTIME&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;ENABLE_SLIDER: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;ENABLE_SLIDER&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;RESERVE_NEXT_DAY: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;RESERVE_NEXT_DAY&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action &lt;span style="color:#ff79c6"&gt;and&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(usernames&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#34;,&amp;#34;&lt;/span&gt;)) &lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(users):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;raise&lt;/span&gt; Exception(&lt;span style="color:#f1fa8c"&gt;&amp;#34;user number should match the number of config&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; success_list &lt;span style="color:#ff79c6"&gt;is&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;None&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; success_list &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; [&lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;*&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(users)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_dayofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_current_dayofweek(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; index, user &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;enumerate&lt;/span&gt;(users):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username, password, times, roomid, seatid, daysofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; user&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;values()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username, password &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; usernames&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)[index], passwords&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)[index]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt;(current_dayofweek &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; daysofweek):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;&amp;#34;Today not set to reserve&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; success_list[index]: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;----------- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;username&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; -- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;times&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; -- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;seatid&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; try -----------&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; reserve(sleep_time&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;SLEEPTIME, max_attempt&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;MAX_ATTEMPT, enable_slider&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ENABLE_SLIDER, reserve_next_day&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;RESERVE_NEXT_DAY)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get_login_status()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;login(username, password)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;requests&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;headers&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update({&lt;span style="color:#f1fa8c"&gt;&amp;#39;Host&amp;#39;&lt;/span&gt;: &lt;span style="color:#f1fa8c"&gt;&amp;#39;office.chaoxing.com&amp;#39;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; suc &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;submit(times, roomid, seatid, action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; success_list[index] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; suc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; success_list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(users, action&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_time &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_current_time(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;start time &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;current_time&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;, action &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;on&amp;#39;&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;off&amp;#39;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; attempt_times &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usernames, passwords &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;None&lt;/span&gt;, &lt;span style="color:#ff79c6"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usernames, passwords &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_user_credentials(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; success_list &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;None&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_dayofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_current_dayofweek(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; today_reservation_num &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;sum&lt;/span&gt;(&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; d &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; users &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; current_dayofweek &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; d&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get(&lt;span style="color:#f1fa8c"&gt;&amp;#39;daysofweek&amp;#39;&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; current_time &lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt; ENDTIME:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; attempt_times &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# try:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; success_list &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; login_and_reserve(users, usernames, passwords, action, success_list)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# except Exception as e:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# print(f&amp;#34;An error occurred: {e}&amp;#34;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;print&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;attempt time &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;attempt_times&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;, time now &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;current_time&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;, success list &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;success_list&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_time &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_current_time(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;sum&lt;/span&gt;(success_list) &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; today_reservation_num:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;print&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;reserved successfully!&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;debug&lt;/span&gt;(users, action&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;Global settings: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;SLEEPTIME: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;SLEEPTIME&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;ENDTIME: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;ENDTIME&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;ENABLE_SLIDER: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;ENABLE_SLIDER&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;RESERVE_NEXT_DAY: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;RESERVE_NEXT_DAY&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; suc &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34; Debug Mode start! , action &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;on&amp;#39;&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;off&amp;#39;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usernames, passwords &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_user_credentials(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_dayofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_current_dayofweek(action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; index, user &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;enumerate&lt;/span&gt;(users):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username, password, times, roomid, seatid, daysofweek &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; user&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;values()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;type&lt;/span&gt;(seatid) &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; seatid &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; [seatid]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; action:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username ,password &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; usernames&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)[index], passwords&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;)[index]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt;(current_dayofweek &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; daysofweek):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;&amp;#34;Today not set to reserve&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;info(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;----------- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;username&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; -- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;times&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; -- &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;seatid&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; try -----------&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; reserve(sleep_time&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;SLEEPTIME, max_attempt&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;MAX_ATTEMPT, enable_slider&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ENABLE_SLIDER)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get_login_status()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;login(username, password)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;requests&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;headers&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update({&lt;span style="color:#f1fa8c"&gt;&amp;#39;Host&amp;#39;&lt;/span&gt;: &lt;span style="color:#f1fa8c"&gt;&amp;#39;office.chaoxing.com&amp;#39;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; suc &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;submit(times, roomid, seatid, action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; suc:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;get_roomid&lt;/span&gt;(args1, args2):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;input&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入用户名：&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;input&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入密码：&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; reserve(sleep_time&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;SLEEPTIME, max_attempt&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;MAX_ATTEMPT, enable_slider&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ENABLE_SLIDER, reserve_next_day&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;RESERVE_NEXT_DAY)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get_login_status()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;login(username&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;username, password&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;password)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;requests&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;headers&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update({&lt;span style="color:#f1fa8c"&gt;&amp;#39;Host&amp;#39;&lt;/span&gt;: &lt;span style="color:#f1fa8c"&gt;&amp;#39;office.chaoxing.com&amp;#39;&lt;/span&gt;})&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; encode &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;input&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入deptldEnc：&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;roomid(encode)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;__name__&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; config_path &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;join(os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;dirname(&lt;span style="color:#8be9fd;font-style:italic"&gt;__file__&lt;/span&gt;), &lt;span style="color:#f1fa8c"&gt;&amp;#39;config.json&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parser &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; argparse&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;ArgumentParser(prog&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;Chao Xing seat auto reserve&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parser&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;add_argument(&lt;span style="color:#f1fa8c"&gt;&amp;#39;-u&amp;#39;&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;&amp;#39;--user&amp;#39;&lt;/span&gt;, default&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;config_path, help&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;user config file&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parser&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;add_argument(&lt;span style="color:#f1fa8c"&gt;&amp;#39;-m&amp;#39;&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;&amp;#39;--method&amp;#39;&lt;/span&gt;, default&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;reserve&amp;#34;&lt;/span&gt; ,choices&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;[&lt;span style="color:#f1fa8c"&gt;&amp;#34;reserve&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;room&amp;#34;&lt;/span&gt;], help&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;for debug&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parser&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;add_argument(&lt;span style="color:#f1fa8c"&gt;&amp;#39;-a&amp;#39;&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;&amp;#39;--action&amp;#39;&lt;/span&gt;, action&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;store_true&amp;#34;&lt;/span&gt;,help&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;use --action to enable in github action&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; args &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; parser&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;parse_args()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; func_dict &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; {&lt;span style="color:#f1fa8c"&gt;&amp;#34;reserve&amp;#34;&lt;/span&gt;: main, &lt;span style="color:#f1fa8c"&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;:debug, &lt;span style="color:#f1fa8c"&gt;&amp;#34;room&amp;#34;&lt;/span&gt;: get_roomid}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;with&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;open&lt;/span&gt;(args&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;user, &lt;span style="color:#f1fa8c"&gt;&amp;#34;r+&amp;#34;&lt;/span&gt;) &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; data:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usersdata &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; json&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;load(data)[&lt;span style="color:#f1fa8c"&gt;&amp;#34;reserve&amp;#34;&lt;/span&gt;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; func_dict[args&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;method](usersdata, args&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;action)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="自动预约座位的-python-脚本解析"&gt;自动预约座位的 Python 脚本解析&lt;/h3&gt;&#10;&lt;p&gt;此文档旨在详细介绍一个用于自动预约座位的 Python 脚本。该脚本的核心功能是登录用户，按照设定的时间预约座位，并提供了一些调试和错误处理的功能。&lt;/p&gt;</description></item><item><title>批量爬取图片-视觉中国</title><link>https://blogtypecho.maxtrnn.top/post/batch-crawling-picturevisual-china-1b7t31/</link><pubDate>Tue, 03 Dec 2024 16:23:06 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/batch-crawling-picturevisual-china-1b7t31/</guid><description>&lt;h1 id="批量爬取图片-视觉中国"&gt;批量爬取图片-视觉中国&lt;/h1&gt;&#10;&lt;p&gt;2024年12月4日00:20:52带编写&lt;/p&gt;&#10;&lt;h1 id="使用教程"&gt;使用教程&lt;/h1&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;去github下载 &lt;a href="https://github.com/itmanmax/getvgcg-picture"&gt;https://github.com/itmanmax/getvgcg-picture&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;双击bat启动&lt;img src="https://picbed-max.oss-cn-wulanchabu.aliyuncs.com/siyuannote/20241204081938.png" alt="image"&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;功能介绍：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;输入搜索的关键词&lt;/li&gt;&#10;&lt;li&gt;下载图片数量&lt;/li&gt;&#10;&lt;li&gt;爬取的方式&lt;/li&gt;&#10;&lt;li&gt;是否统一命名 ：格式为foods1.jpg foods2.jpg 这种&lt;/li&gt;&#10;&lt;li&gt;以及保存位置&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;img src="https://picbed-max.oss-cn-wulanchabu.aliyuncs.com/siyuannote/20241204082138.png" alt="image"&gt;&lt;img src="https://picbed-max.oss-cn-wulanchabu.aliyuncs.com/siyuannote/20241204082154.png" alt="image"&gt;&lt;img src="https://picbed-max.oss-cn-wulanchabu.aliyuncs.com/siyuannote/20241204082201.png" alt="image"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用如从简单！&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;声明：仅供娱乐使用，请勿商业使用！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h1 id="源码介绍"&gt;源码介绍&lt;/h1&gt;&#10;&lt;h2 id="代码分享"&gt;代码分享&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; os&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; time&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;from&lt;/span&gt; bs4 &lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; BeautifulSoup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; random&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; tkinter &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; tk&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;from&lt;/span&gt; tkinter &lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; ttk, messagebox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; logging&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;from&lt;/span&gt; datetime &lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; datetime&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;class&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;ImageDownloaderGUI&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;__init__&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;, root):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;title(&lt;span style="color:#f1fa8c"&gt;&amp;#34;图片下载器&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;geometry(&lt;span style="color:#f1fa8c"&gt;&amp;#34;600x650&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 设置整体样式&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; style &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Style()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; style&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;configure(&lt;span style="color:#f1fa8c"&gt;&amp;#39;TLabel&amp;#39;&lt;/span&gt;, font&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#39;微软雅黑&amp;#39;&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; style&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;configure(&lt;span style="color:#f1fa8c"&gt;&amp;#39;TButton&amp;#39;&lt;/span&gt;, font&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#39;微软雅黑&amp;#39;&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; style&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;configure(&lt;span style="color:#f1fa8c"&gt;&amp;#39;TRadiobutton&amp;#39;&lt;/span&gt;, font&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#39;微软雅黑&amp;#39;&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; style&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;configure(&lt;span style="color:#f1fa8c"&gt;&amp;#39;TCheckbutton&amp;#39;&lt;/span&gt;, font&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#39;微软雅黑&amp;#39;&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 创建主框架&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; main_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Frame(root, padding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;20&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; main_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;BOTH, expand&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;True&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 搜索关键词区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; search_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;LabelFrame(main_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;搜索设置&amp;#34;&lt;/span&gt;, padding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; search_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(search_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;搜索关键词:&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;search_entry &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Entry(search_frame, width&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;40&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;search_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;search_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;insert(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;Restaurant&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(search_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载数量:&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;count_entry &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Entry(search_frame, width&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;40&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;count_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;count_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;insert(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 下载模式区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mode_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;LabelFrame(main_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载模式&amp;#34;&lt;/span&gt;, padding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mode_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;StringVar(value&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;顺序&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Radiobutton(mode_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;顺序下载&amp;#34;&lt;/span&gt;, variable&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode, value&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;顺序&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Radiobutton(mode_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;随机下载&amp;#34;&lt;/span&gt;, variable&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode, value&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;随机&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Radiobutton(mode_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;跳跃下载&amp;#34;&lt;/span&gt;, variable&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode, value&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;跳跃&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 跳跃设置区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jump_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Frame(mode_frame)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jump_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(jump_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;跳跃距离:&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(side&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;left&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;jump_entry &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Entry(jump_frame, width&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;jump_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(side&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;left&amp;#39;&lt;/span&gt;, padx&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;jump_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;insert(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 命名选项区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;LabelFrame(main_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;命名选项&amp;#34;&lt;/span&gt;, padding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;rename_var &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;BooleanVar(value&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;rename_check &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Checkbutton(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name_frame,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;统一命名（例：关键词1.jpg, 关键词2.jpg）&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; variable&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;rename_var&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;rename_check&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 保存路径区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;LabelFrame(main_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;保存位置&amp;#34;&lt;/span&gt;, padding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path_input_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Frame(path_frame)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path_input_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Entry(path_input_frame)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(side&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;left&amp;#39;&lt;/span&gt;, fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, expand&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;True&lt;/span&gt;, padx&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;insert(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;r&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;C:\Users\86147\图片\pypicture&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;browse_btn &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Button(path_input_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;浏览&amp;#34;&lt;/span&gt;, command&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;browse_path)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;browse_btn&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(side&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;right&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 下载按钮区域&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; btn_frame &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Frame(main_frame)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; btn_frame&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X, pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;20&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; download_btn &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Button(btn_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;开始下载&amp;#34;&lt;/span&gt;, command&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;start_download, style&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;Accent.TButton&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; download_btn&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 进度显示&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;progress_label &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(main_frame, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, font&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(&lt;span style="color:#f1fa8c"&gt;&amp;#39;微软雅黑&amp;#39;&lt;/span&gt;, &lt;span style="color:#bd93f9"&gt;9&lt;/span&gt;))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;progress_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 添加状态栏&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(root, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;就绪&amp;#34;&lt;/span&gt;, relief&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;SUNKEN, anchor&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(side&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;BOTTOM, fill&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;X)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 设置日志&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;setup_logging()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;setup_logging&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 配置日志&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;logger &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;getLogger(&lt;span style="color:#f1fa8c"&gt;&amp;#39;ImageDownloader&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;logger&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;setLevel(logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;INFO)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 创建文件处理器&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fh &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;FileHandler(&lt;span style="color:#f1fa8c"&gt;&amp;#39;error.txt&amp;#39;&lt;/span&gt;, encoding&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fh&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;setLevel(logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;ERROR)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 设置日志格式&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; formatter &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Formatter(&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(asctime)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; - &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(levelname)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; - &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;%(message)s&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fh&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;setFormatter(formatter)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;logger&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;addHandler(fh)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;browse_path&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;from&lt;/span&gt; tkinter &lt;span style="color:#ff79c6"&gt;import&lt;/span&gt; filedialog&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; path &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; filedialog&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;askdirectory()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; path:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;delete(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;END)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;insert(&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;, path)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;start_download&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;正在下载...&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; keyword &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;search_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strip()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; save_path &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strip()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; count &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;int&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;count_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strip())&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; ValueError:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showerror(&lt;span style="color:#f1fa8c"&gt;&amp;#34;错误&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入有效的下载数量！&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; keyword:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showerror(&lt;span style="color:#f1fa8c"&gt;&amp;#34;错误&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入搜索关键词！&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; save_path:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showerror(&lt;span style="color:#f1fa8c"&gt;&amp;#34;错误&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;请选择保存路径！&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 创建以关键词命名的子文件夹&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; keyword_folder &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;join(save_path, keyword)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;exists(keyword_folder):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;makedirs(keyword_folder)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;progress_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;开始下载...&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_images(keyword, count, keyword_folder)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showinfo(&lt;span style="color:#f1fa8c"&gt;&amp;#34;完成&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;成功下载了 &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;count&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; 张图片到文件夹 &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;keyword_folder&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;！&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载完成&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; Exception &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showerror(&lt;span style="color:#f1fa8c"&gt;&amp;#34;错误&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载过程中出现错误：&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;(e)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载出错&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;finally&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;progress_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;download_images&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;, keyword, count, save_folder):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; base_url &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;https://www.vcg.com/creative-image/&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;keyword&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 更新状态&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;progress_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;正在获取图片列表...&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; soup &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; make_soup(base_url)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; all_img_urls &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; get_image_urls(soup)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; all_img_urls:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;raise&lt;/span&gt; Exception(&lt;span style="color:#f1fa8c"&gt;&amp;#34;未找到任何图片&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 根据下载模式选择图片&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get() &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#34;顺序&amp;#34;&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_urls &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; all_img_urls[:count]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;elif&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get() &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#34;随机&amp;#34;&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_urls &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; random&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;sample(all_img_urls, &lt;span style="color:#8be9fd;font-style:italic"&gt;min&lt;/span&gt;(count, &lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(all_img_urls)))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;elif&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;download_mode&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get() &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#34;跳跃&amp;#34;&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jump_distance &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;int&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;jump_entry&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;strip())&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; ValueError:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; messagebox&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;showerror(&lt;span style="color:#f1fa8c"&gt;&amp;#34;错误&amp;#34;&lt;/span&gt;, &lt;span style="color:#f1fa8c"&gt;&amp;#34;请输入有效的跳跃距离！&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_urls &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; all_img_urls[::jump_distance][:count]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 确定起始编号&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start_index &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get_start_index(keyword, save_folder)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 创建进度条&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Toplevel(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;title(&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载进度&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;geometry(&lt;span style="color:#f1fa8c"&gt;&amp;#34;300x150&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;transient(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root) &lt;span style="color:#6272a4"&gt;# 设置为主窗口的子窗口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(progress_window, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;正在下载...&amp;#34;&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_bar &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Progressbar(progress_window, length&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;200&lt;/span&gt;, mode&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;determinate&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_bar&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_text &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ttk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Label(progress_window, text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_text&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;pack(pady&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 设置进度条最大值&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_bar[&lt;span style="color:#f1fa8c"&gt;&amp;#39;maximum&amp;#39;&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(img_urls)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; i, img_url &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;enumerate&lt;/span&gt;(img_urls, start&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 更新进度显示&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_text&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;正在下载第 &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;i&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;/&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(img_urls)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt; 张图片&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_bar[&lt;span style="color:#f1fa8c"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; i&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;status_label&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;config(text&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;正在下载: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;i&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;/&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(img_urls)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 更新界面&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;update_idletasks()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;rename_var&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; filename &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;keyword&lt;span style="color:#f1fa8c"&gt;}{&lt;/span&gt;start_index &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; i &lt;span style="color:#ff79c6"&gt;-&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;.jpg&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; filename &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; img_url&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;)[&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;split(&lt;span style="color:#f1fa8c"&gt;&amp;#39;?&amp;#39;&lt;/span&gt;)[&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; save_path &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;path&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;join(save_folder, filename)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; download_image(img_url, save_path)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; Exception &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;logger&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;error(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载失败 &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;img_url&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;(e)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 控制更新频率，避免界面卡顿&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; i &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;: &lt;span style="color:#6272a4"&gt;# 每下载两张图片更新一次界面&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; time&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;sleep(&lt;span style="color:#bd93f9"&gt;0.1&lt;/span&gt;) &lt;span style="color:#6272a4"&gt;# 短暂延时，让界面有机会响应&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 关闭进度窗口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; progress_window&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;destroy()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; Exception &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="font-style:italic"&gt;self&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;logger&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;error(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;下载过程出错: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;(e)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;raise&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;get_start_index&lt;/span&gt;(&lt;span style="font-style:italic"&gt;self&lt;/span&gt;, keyword, save_folder):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;# 获取文件夹中已有的最大编号&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; existing_files &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; [f &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; f &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; os&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;listdir(save_folder) &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; f&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;startswith(keyword) &lt;span style="color:#ff79c6"&gt;and&lt;/span&gt; f&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;endswith(&lt;span style="color:#f1fa8c"&gt;&amp;#39;.jpg&amp;#39;&lt;/span&gt;)]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_index &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; file &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; existing_files:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;int&lt;/span&gt;(file[&lt;span style="color:#8be9fd;font-style:italic"&gt;len&lt;/span&gt;(keyword):&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;4&lt;/span&gt;]) &lt;span style="color:#6272a4"&gt;# 提取编号&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; index &lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; max_index:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_index &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; index&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; ValueError:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; max_index &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;make_soup&lt;/span&gt;(url):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; headers &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;User-Agent&amp;#39;&lt;/span&gt;: &lt;span style="color:#f1fa8c"&gt;&amp;#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; requests&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get(url, headers&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;headers)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;raise_for_status()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; BeautifulSoup(response&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;text, &lt;span style="color:#f1fa8c"&gt;&amp;#39;html.parser&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; Exception &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;error(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;Error making soup for &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;url&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;(e)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;raise&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;get_image_urls&lt;/span&gt;(soup):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_urls &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; img_tag &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; soup&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;find_all(&lt;span style="color:#f1fa8c"&gt;&amp;#39;img&amp;#39;&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_url &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; img_tag&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get(&lt;span style="color:#f1fa8c"&gt;&amp;#39;data-src&amp;#39;&lt;/span&gt;) &lt;span style="color:#ff79c6"&gt;or&lt;/span&gt; img_tag&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get(&lt;span style="color:#f1fa8c"&gt;&amp;#39;src&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; img_url:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; img_url&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;lower()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;endswith(&lt;span style="color:#f1fa8c"&gt;&amp;#39;.jpg&amp;#39;&lt;/span&gt;) &lt;span style="color:#ff79c6"&gt;and&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;not&lt;/span&gt; img_url&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;lower()&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;endswith(&lt;span style="color:#f1fa8c"&gt;&amp;#39;.jpeg&amp;#39;&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; img_url&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#f1fa8c"&gt;&amp;#39;//&amp;#39;&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_url &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;https:&amp;#39;&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; img_url&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;elif&lt;/span&gt; img_url&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#f1fa8c"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_url &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;https://www.vcg.com&amp;#39;&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; img_url&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;debug(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;Found image URL: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;img_url&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; img_urls&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;append(img_url)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; img_urls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;download_image&lt;/span&gt;(url, save_path):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;try&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; headers &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;User-Agent&amp;#39;&lt;/span&gt;: &lt;span style="color:#f1fa8c"&gt;&amp;#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;with&lt;/span&gt; requests&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;get(url, headers&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;headers, stream&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;True&lt;/span&gt;) &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; response:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;raise_for_status()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;with&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;open&lt;/span&gt;(save_path, &lt;span style="color:#f1fa8c"&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;) &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; file:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; chunk &lt;span style="color:#ff79c6"&gt;in&lt;/span&gt; response&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;iter_content(chunk_size&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;8192&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; chunk:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; file&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;write(chunk)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;True&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;except&lt;/span&gt; Exception &lt;span style="color:#ff79c6"&gt;as&lt;/span&gt; e:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logging&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;error(&lt;span style="color:#f1fa8c"&gt;f&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;Error downloading &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;url&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;: &lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;{&lt;/span&gt;&lt;span style="color:#8be9fd;font-style:italic"&gt;str&lt;/span&gt;(e)&lt;span style="color:#f1fa8c"&gt;}&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;False&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;def&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; root &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; tk&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;Tk()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; app &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; ImageDownloaderGUI(root)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; root&lt;span style="color:#ff79c6"&gt;.&lt;/span&gt;mainloop()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;__name__&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#f1fa8c"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; main()&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="图片下载器-gui-详解"&gt;图片下载器 GUI 详解&lt;/h3&gt;&#10;&lt;h4 id="1-项目概述"&gt;1. 项目概述&lt;/h4&gt;&#10;&lt;p&gt;本项目实现了一个简单的图片下载器 GUI，用户可以通过输入关键词和下载模式来下载对应的图片。以下是程序的主要功能与实现细节。&lt;/p&gt;</description></item><item><title>短信发送验证码</title><link>https://blogtypecho.maxtrnn.top/post/49/</link><pubDate>Fri, 13 Sep 2024 12:09:00 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/49/</guid><description>&lt;p&gt;本篇文章关于发送短信验证码的教程&lt;/p&gt;&#10;&lt;h2 id="2024年9月13日201034"&gt;2024年9月13日20:10:34&lt;/h2&gt;&#10;&lt;p&gt;2024年9月15日02:13:32&#10;写到大半夜，c&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;2024年10月12日10:36:47&lt;/p&gt;&#10;&lt;h2 id="官方文档"&gt;官方文档&lt;/h2&gt;&#10;&lt;p&gt;[scode type=&amp;ldquo;green&amp;rdquo;]基本信息&#10;本接口主要用于向单个手机号发送短信，也支持向多个手机号（单次最多支持 1000 个手机号）发送相同签名、相同模板变量的短信，群发存在一定延迟。如果您需要向多个手机号发送不同签名、不同模板变量的短信，请使用 SendBatchSms 接口（单次最多支持 100 个手机号）。&#10;服务接入点(Endpoint)：全局接入点域名为dysmsapi.aliyuncs.com。请参见服务接入点 ，根据您的使用地域，选择对应的接入点地址。&#10;快速调用&#10;推荐您通过 SDK 调用 API。 如果您需要了解如何使用 ，请参见首次调用 API。&#10;如果您需要使用控制台发送短信，请参见通过控制台发送短信。&#10;如果您需要自定义封装 API 调用，请参见V3 版本请求体&amp;amp;签名机制。&#10;注意事项&#10;国内短信服务超时时间建议设置为≥1S；发生超时失败的情况时，建议查看回执状态后再判断是否重试。超时和重试的相关设置，请参见超时机制、重试机制。&#10;国内短信、国际短信和多媒体短信，均不支持幂等的能力，请您自行做好幂等控制。&#10;发送短信会根据发送量计费，计费详情请参见计费概述。&#10;QPS 限制&#10;本接口的单用户 QPS 限制为 5000/秒。超过限制，API 调用将会被限流，请合理使用。&lt;/p&gt;&#10;&lt;p&gt;请求参数&#10;字段名称&#9;字段详情&#10;PhoneNumbers&#10;string&#10;接收短信的手机号码。手机号码格式：展开详情&lt;/p&gt;&#10;&lt;p&gt;示例值:&#10;1390000****&#10;SignName&#10;string&#10;短信签名名称。展开详情&lt;/p&gt;&#10;&lt;p&gt;示例值:&#10;阿里云&#10;参考取值来源:&#10;UpdateSmsSign&#10;CreateSmsSign&#10;AddSmsSign&#10;QuerySmsSignList&#10;ModifySmsSign&#10;TemplateCode&#10;string&#10;短信模板 Code。展开详情&lt;/p&gt;&#10;&lt;p&gt;示例值:&#10;SMS_15305****&#10;参考取值来源:&#10;AddSmsTemplate&#10;UpdateSmsTemplate&#10;CreateSmsTemplate&#10;ModifySmsTemplate&#10;QuerySmsTemplateList&#10;TemplateParam&#10;string&#10;短信模板变量对应的实际值。支持传入多个参数。展开详情&lt;/p&gt;</description></item><item><title>写了一个课表推送，还不支持自己导入</title><link>https://blogtypecho.maxtrnn.top/post/41/</link><pubDate>Sun, 01 Sep 2024 17:17:00 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/41/</guid><description>&lt;h2 id="需要手动导入自己的课表信息"&gt;需要手动导入自己的课表信息&lt;/h2&gt;&#10;&lt;p&gt;找个定时软件按时户动pY脚本，这个也是 qmsg推送服务，哈哈，可以看的出，我好多都用它了，其是还是方便，Wechat的有限制，所以还是qmsg的好&#10;具体地址：[button color=&amp;ldquo;primary&amp;rdquo; icon=&amp;quot;&amp;quot; url=&amp;ldquo;https://github.com/itmanmax/MAXTR-Plugins&amp;rdquo; type=&amp;quot;&amp;quot;]github链接[/button]&#10;[scode type=&amp;ldquo;green&amp;rdquo;]import datetime&#10;import requests&lt;/p&gt;&#10;&lt;h1 id="qmsg-发送函数"&gt;Qmsg 发送函数&lt;/h1&gt;&#10;&lt;p&gt;def send_qmsg通知(qmsg_key, qq_number, msg):&#10;postdata = {&#10;&amp;lsquo;msg&amp;rsquo;: msg,&#10;&amp;lsquo;qq&amp;rsquo;: qq_number&#10;}&#10;response = requests.post(f&amp;rsquo;&lt;a href="https://qmsg.zendee.cn/send/%7Bqmsg_key%7D'"&gt;https://qmsg.zendee.cn/send/{qmsg_key}'&lt;/a&gt;, data=postdata)&#10;if response.status_code == 200:&#10;print(&amp;ldquo;通知已发送到QQ。&amp;rdquo;)&#10;else:&#10;print(f&amp;quot;通知发送失败，错误码：{response.status_code}，响应内容：{response.text}&amp;quot;)&lt;/p&gt;&#10;&lt;h1 id="课程表和时间段信息"&gt;课程表和时间段信息&lt;/h1&gt;&#10;&lt;p&gt;course_schedule = {&#10;1: [(&amp;ldquo;编译原理&amp;rdquo;, &amp;ldquo;第一节&lt;del&gt;第二节&amp;rdquo;, &amp;ldquo;3号楼2030202&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;编译原理实验&amp;rdquo;, &amp;ldquo;第三节&lt;del&gt;第四节&amp;rdquo;, &amp;ldquo;6号楼2060302&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;人工智能&amp;rdquo;, &amp;ldquo;第六节&lt;del&gt;第八节&amp;rdquo;, &amp;ldquo;3号楼2030202&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;15周&amp;rdquo;),&#10;(&amp;ldquo;人工智能&amp;rdquo;, &amp;ldquo;第九节&lt;del&gt;第十节&amp;rdquo;, &amp;ldquo;6号楼2060302&amp;rdquo;, &amp;ldquo;4&lt;/del&gt;12周&amp;rdquo;)],&#10;2: [(&amp;ldquo;软件设计与体系结构实验&amp;rdquo;, &amp;ldquo;第九节&lt;del&gt;第十节&amp;rdquo;, &amp;ldquo;6号楼2060302&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;软件设计与体系结构&amp;rdquo;, &amp;ldquo;第六节&lt;del&gt;第八节&amp;rdquo;, &amp;ldquo;3号楼2030202&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;软件需求分析与建模&amp;rdquo;, &amp;ldquo;第三节&lt;del&gt;第五节&amp;rdquo;, &amp;ldquo;3号楼2030202,6号楼2060302&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;)],&#10;3: [(&amp;ldquo;计算机网络&amp;rdquo;, &amp;ldquo;第三节&lt;del&gt;第四节&amp;rdquo;, &amp;ldquo;3号楼2030203&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;软件应用开发实践&amp;rdquo;, &amp;ldquo;第一节&lt;del&gt;第二节&amp;rdquo;, &amp;ldquo;6号楼2060302&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;)],&#10;4: [(&amp;ldquo;音乐鉴赏&amp;rdquo;, &amp;ldquo;第九节&lt;del&gt;第十节&amp;rdquo;, &amp;ldquo;1号楼2010404&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;9周&amp;rdquo;),&#10;(&amp;ldquo;经济学原理&amp;rdquo;, &amp;ldquo;第六节&lt;del&gt;第七节&amp;rdquo;, &amp;ldquo;1号楼2010501&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;计算机网络实验&amp;rdquo;, &amp;ldquo;第三节&lt;del&gt;第四节&amp;rdquo;, &amp;ldquo;6号楼2060201&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;计算机网络&amp;rdquo;, &amp;ldquo;第一节&lt;del&gt;第二节&amp;rdquo;, &amp;ldquo;3号楼2030203&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;)],&#10;5: [(&amp;ldquo;人机界面设计&amp;rdquo;, &amp;ldquo;第三节&lt;del&gt;第五节&amp;rdquo;, &amp;ldquo;2号楼2020103,6号楼2060101&amp;rdquo;, &amp;ldquo;1&lt;/del&gt;18周&amp;rdquo;),&#10;(&amp;ldquo;大学生职业生涯规划与就业指导（III）&amp;rdquo;, &amp;ldquo;第一节&lt;del&gt;第二节&amp;rdquo;, &amp;ldquo;1号楼2010506&amp;rdquo;, &amp;ldquo;10&lt;/del&gt;18周&amp;rdquo;)],&#10;6: [], # 周六无课程&#10;7: [] # 周日无课程&#10;}&lt;/p&gt;</description></item><item><title>自动推送邮件py脚本</title><link>https://blogtypecho.maxtrnn.top/post/28/</link><pubDate>Fri, 30 Aug 2024 10:23:00 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/28/</guid><description>&lt;p&gt;待书写&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;2024年9月1日22:00:25&#10;项目地址：&lt;a href="https://github.com/itmanmax/MAXTR-Plugins"&gt;github地址&lt;/a&gt;&#10;自行下载&#10;注意配置个人信息&#10;qmsg的key申请地址：&lt;a href="https://qmsg.zendee.cn/"&gt;qmsg&lt;/a&gt;&lt;/p&gt;</description></item><item><title>自动推送宿舍电费和校园卡余额的脚本（构想中）</title><link>https://blogtypecho.maxtrnn.top/post/25/</link><pubDate>Thu, 29 Aug 2024 10:26:00 +0800</pubDate><guid>https://blogtypecho.maxtrnn.top/post/25/</guid><description>&lt;h2 id="万事开头难怎么抓包是个问题"&gt;万事开头难，怎么抓包是个问题&lt;/h2&gt;&#10;&lt;h2 id="两个平台都可以在微信小程序或者androidios平台打开我直到一些抓包软件但是不会操作这个是问题"&gt;两个平台都可以在微信小程序或者Android/ios平台打开，我直到一些抓包软件，但是不会操作，这个是问题&lt;/h2&gt;&#10;&lt;h2 id="把qmsg插件配套使用"&gt;把qmsg插件配套使用&lt;/h2&gt;&#10;&lt;p&gt;想法是通过抓包获取信息调用插件把信息转过去发给qq（多么天真的想法）&lt;/p&gt;&#10;&lt;hr&gt;</description></item></channel></rss>