<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>S.Feng 技術手扎 Blog</title>
        <link>https://www.k1dav.fun/blog</link>
        <description>S.Feng 技術手扎 Blog</description>
        <lastBuildDate>Thu, 08 Dec 2022 10:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-Hant</language>
        <item>
            <title><![CDATA[104 自動打卡]]></title>
            <link>https://www.k1dav.fun/blog/2022/12/08/104</link>
            <guid>https://www.k1dav.fun/blog/2022/12/08/104</guid>
            <pubDate>Thu, 08 Dec 2022 10:00:00 GMT</pubDate>
            <description><![CDATA[不想要手動打開 App 打卡]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="不想要手動打開-app-打卡">不想要手動打開 App 打卡<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E4%B8%8D%E6%83%B3%E8%A6%81%E6%89%8B%E5%8B%95%E6%89%93%E9%96%8B-app-%E6%89%93%E5%8D%A1" class="hash-link" aria-label="不想要手動打開 App 打卡的直接連結" title="不想要手動打開 App 打卡的直接連結" translate="no">​</a></h2>
<p>用 <a href="https://playwright.dev/" target="_blank" rel="noopener noreferrer" class="">Playwright</a> 加上 Github Action 來實現吧！</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-fork-我已經寫好的-repo">1. Fork 我已經寫好的 <a href="https://github.com/k1dave6412/104ClockIn" target="_blank" rel="noopener noreferrer" class="">Repo</a><a href="https://www.k1dav.fun/blog/2022/12/08/104#1-fork-%E6%88%91%E5%B7%B2%E7%B6%93%E5%AF%AB%E5%A5%BD%E7%9A%84-repo" class="hash-link" aria-label="1-fork-我已經寫好的-repo的直接連結" title="1-fork-我已經寫好的-repo的直接連結" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-clone-下來並安裝必要套件">2. Clone 下來，並安裝必要套件<a href="https://www.k1dav.fun/blog/2022/12/08/104#2-clone-%E4%B8%8B%E4%BE%86%E4%B8%A6%E5%AE%89%E8%A3%9D%E5%BF%85%E8%A6%81%E5%A5%97%E4%BB%B6" class="hash-link" aria-label="2. Clone 下來，並安裝必要套件的直接連結" title="2. Clone 下來，並安裝必要套件的直接連結" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">pip3 </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-r</span><span class="token plain"> requirements.txt</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">// 安裝瀏覽器</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">// Windows</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">PLAYWRIGHT_BROWSERS_PATH</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">%USERPROFILE%</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">AppData</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">Local</span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">ms-playwright python </span><span class="token parameter variable" style="color:#36acaa">-m</span><span class="token plain"> playwright </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">// Mac</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">PLAYWRIGHT_BROWSERS_PATH</span><span class="token operator" style="color:#393A34">=~</span><span class="token plain">/Library/Caches/ms-playwright python3 </span><span class="token parameter variable" style="color:#36acaa">-m</span><span class="token plain"> playwright </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">// Linux</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">PLAYWRIGHT_BROWSERS_PATH</span><span class="token operator" style="color:#393A34">=</span><span class="token environment constant" style="color:#36acaa">$HOME</span><span class="token plain">/pw-browsers python3 </span><span class="token parameter variable" style="color:#36acaa">-m</span><span class="token plain"> playwright </span><span class="token function" style="color:#d73a49">install</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-登入並儲存-session-效期為一個月">4. 登入並儲存 Session (效期為一個月)<a href="https://www.k1dav.fun/blog/2022/12/08/104#4-%E7%99%BB%E5%85%A5%E4%B8%A6%E5%84%B2%E5%AD%98-session-%E6%95%88%E6%9C%9F%E7%82%BA%E4%B8%80%E5%80%8B%E6%9C%88" class="hash-link" aria-label="4. 登入並儲存 Session (效期為一個月)的直接連結" title="4. 登入並儲存 Session (效期為一個月)的直接連結" translate="no">​</a></h2>
<p>會自動打開一個瀏覽器，並自動進行登入<br>
在 60s 內填入 OTP 完成登入<br>
就會自動關閉</p>
<p>此時會多一個 <code>cred.json</code> 會記載登入資訊</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">ac</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">xxxx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">pwd</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">xxxx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">python3 login.py</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-建立一個私人的-gist-將-credjson-貼上並設定在-action-secret">5. 建立一個私人的 gist 將 <code>cred.json</code> 貼上，並設定在 Action Secret<a href="https://www.k1dav.fun/blog/2022/12/08/104#5-%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E7%A7%81%E4%BA%BA%E7%9A%84-gist-%E5%B0%87-credjson-%E8%B2%BC%E4%B8%8A%E4%B8%A6%E8%A8%AD%E5%AE%9A%E5%9C%A8-action-secret" class="hash-link" aria-label="5-建立一個私人的-gist-將-credjson-貼上並設定在-action-secret的直接連結" title="5-建立一個私人的-gist-將-credjson-貼上並設定在-action-secret的直接連結" translate="no">​</a></h2>
<ol>
<li class="">前往 <a href="https://gist.github.com/" target="_blank" rel="noopener noreferrer" class="">Github Gist</a></li>
<li class="">點擊右上角進行新增</li>
<li class="">新增後，複製 gist url</li>
<li class="">新增 Action Secret <code>GIST_URL</code></li>
<li class="">觸發 Action 即成功</li>
</ol>
<blockquote>
<p>建立 gist 時選 <strong>Create secret gist</strong>，檔名為 <code>cred.json</code>，內容貼上剛剛產生的 cookie JSON。（原截圖含 session cookie，已移除）</p>
</blockquote>
<p><img decoding="async" loading="lazy" alt="Add GIST_URL Secret" src="https://www.k1dav.fun/assets/images/gist_url-7ba7bf18cf2c7418aff0c263b9caf2a6.png" width="809" height="434" class="img_ev3q"></p>
<hr>
<p>接下來進行自動打卡的設定</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-設定-cloud-function">6. 設定 Cloud Function<a href="https://www.k1dav.fun/blog/2022/12/08/104#6-%E8%A8%AD%E5%AE%9A-cloud-function" class="hash-link" aria-label="6. 設定 Cloud Function的直接連結" title="6. 設定 Cloud Function的直接連結" translate="no">​</a></h2>
<ul>
<li class="">允許未經允許的叫用</li>
<li class="">128MB</li>
<li class="">貼上以下程式碼</li>
</ul>
<p><img decoding="async" loading="lazy" alt="cf 設定" src="https://www.k1dav.fun/assets/images/cf-4f717f1a51e33a36c7707672d18c533b.png" width="550" height="876" class="img_ev3q"></p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">main.py</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> functions_framework</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> httpx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:#393A34">@functions_framework</span><span class="token decorator annotation punctuation" style="color:#393A34">.</span><span class="token decorator annotation punctuation" style="color:#393A34">http</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">clock</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">request</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    request_json </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> request</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">silent</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    token </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> request_json</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"payload"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"token"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> request_json</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"payload"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"url"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    headers </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">"Authorization"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string-interpolation string" style="color:#e3116c">f"Bearer </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">token</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    resp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> httpx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">post</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> json</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">"ref"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"main"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> headers</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">headers</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> resp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status_code </span><span class="token operator" style="color:#393A34">&gt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">400</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> resp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">resp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status_code</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<div class="language-plain codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">requirements.txt</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-plain codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">functions-framework==3.*</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">httpx</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-設定-cloud-scheduler">7. 設定 Cloud Scheduler<a href="https://www.k1dav.fun/blog/2022/12/08/104#7-%E8%A8%AD%E5%AE%9A-cloud-scheduler" class="hash-link" aria-label="7. 設定 Cloud Scheduler的直接連結" title="7. 設定 Cloud Scheduler的直接連結" translate="no">​</a></h2>
<ol>
<li class="">
<p>複製 Cloud Funcation 網址
<img decoding="async" loading="lazy" alt="Cloud Funcation URL" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAABLCAYAAAArkK9yAAABWWlDQ1BJQ0MgUHJvZmlsZQAAKJFtkLtLQmEYxn+aIZhUQ1M1CA1dsAsWXYaCcpCi4WT3ljgdTQO1j3OUag2XqLmhIZra2gTXpmiNoKI/oD+gwKXk9B6t7PZ9vLw/Hp7v4+EBt0dXKuUB0pmsGY1MBVZW1wLeJ/x4aaaVYd2w1KSmzYqFz/3zlO5wOfu21/nLp/avkvnI4fPN6Uy+Y7z/r//H8cXiliH7TabHUGYWXF3C2k5WObwr3GJKKOEjhxNVPnN4o8qFimchGha+Fm42knpM+EE4uPFNT3zjdCpnfGRw0vvjmcV52Y0y7WhMEmKEUeZYkm7+9w5VvGG2UexhskWCJFkC8lrJTREXniaDQR9B4RADMiGn49/d1TRrAsYkv/ugpq2XoZiDtoua1nECTZ1QKCnd1L8adZU81uZgqMoNRag/tu2XZfB2Q/netl+Ltl0+h7pHuCy9Az0PYlqxlN9cAAAAVmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADkoYABwAAABIAAABEoAIABAAAAAEAAAFWoAMABAAAAAEAAABLAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdPjSDA0AAAHVaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjc1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM0MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqg4hogAAAR5klEQVR4Ae2cCXgV1RmGf5KQQIAAgQAqO4KIYBBcYosKggWplqK1VK1aLIJLrdpa9EFEUIFS2rogLWJlkaWyL4IsAdkiW9gDBEjYAgkECAkhZCPJ7fnOdYbJzb03uTJw0/t8//PcO+ecOXPmzHvmfvOf/0xSxaFMaCRAAiRAArYRCLKtJTZEAiRAAiSgCVBYeSOQAAmQgM0EKKw2A2VzJEACJEBh5T1AAiRAAjYToLDaDJTNkQAJkACFlfcACZAACdhMgMJqM1A2RwIkQAIUVt4DJEACJGAzAQqrzUDZHAmQAAlQWHkPkAAJkIDNBCisNgNlcyRAAiRAYeU9QAIkQAI2E6Cw2gyUzZEACZAAhZX3AAmQAAnYTIDCajNQNkcCJEACFFbeAyRAAiRgMwEKq81A2RwJkAAJUFh5D5AACZCAzQQorDYDZXMkQAIkQGHlPUACJEACNhOgsNoMlM2RAAmQAIWV9wAJkAAJ2EyAwmozUDZHAiRAAhRW3gMkQAIkYDMBCqvNQNkcCZAACVBYeQ+QAAmQgM0EKKw2A2VzJEACJEBh5T1AAiRAAjYToLDaDJTNkQAJkACFlfcACZAACdhMgMJqM1A2RwIkQAIUVt4DJEACJGAzAQqrzUDZHAmQAAlQWHkPkAAJkIDNBCisNgNlcyRAAiTgs7AWFxdLUVFRhcmhfmFhYZn6KMvNzS1TzgISIIHrR2D48OFSpUoVr5/r1xvvZ1q7dq1069bN7CvS6H9ltCoOZb50bO7cubJkyRKZMmWKTJ48WXCxrlanTh355JNPdPHs2bMFx2BrtalTp+pj0QaNBEigLIFlH22X5R9vN3d8cnygTr/WbKJZ1uv1zvLwG53NvK8JiGp55qNElNecz/uhMSNGjHCrNUZj7733XqUSWZ89Vgjq008/LYmJiXLo0CFp3769dO/eXYYNG6bTTz31lGzdutW43mu2nTQoVr6fkXjN2q9Iw0e2nZakjWlm1djPdoqjxPNzatfSIzKu3xKzvq+J9VP3yZQ/rC73sNjxu+Tc8exy67FC5SYAUYWYGh+jt8hDUGFW4TX2/5gtxNPT58e0Z9cx8EjhmUJcYV27dhWIqPHRheqrPOE16l2vrU/CumHDBqldu7ZkZmbKm2++KSUlJVKvXj3Zs2ePpKWlSWxsrLRs2dLs++rVq2Xbtm1y7tw57bWmpqZKv379rnkIAMKCj2GueaP8arfLP94h1SJCdTNHt6fLsZ1npEpQ+R7A1Z63vOPDaoRIUIhPQ1tek9xfiQgYnqwhrnZ1DSLmLSzgj2k3BNMwiOmaNWu0uKIv+KDMMGtdo8xfW59+fTNmzNDe6Ntvvy3vvPOOBAUFycaNG2X+/Pny3HPPSXJysowZM8a8lnXr1smuXbvk/PnzsnDhQsnKypL4+HhB3BW2d+9eGThwoAwZMkTnUQ9C7IsdWH9Sti9KlsJcZ9z3SPxpObZDiZz6JG8+Ja75/IuFcmDdSe3RbZyZKAfjUkudruDSZYFnmbQpTUqKnd5nSXGJ7F11vFS986k5cikzX5q0r6/LN399QGL63WLWyT6bK9sWJut+mIUuiaKCYt2XzbMPyvmTF0vtLe94BHASVh4rcxwaiWpeW0KrhQiudf+aFLmQnitb1DlS92eUOoeRObH3XKl+4tpPHTwvvpYnrj1hesrw3Hd9e1QuZuSJp3Lj/NjmXiiQfatTzKLsM7mlxgbju++7FH3NxZdLzHrWRHFRiW4jft4hycnIt+4y02ePXpDju87otjH2Z45k6bxRAYzSEs/rLGYkGGfXe8yoa93iftuk7oEzqn3DcK6T+5xsMbsCU8PQdqZqG2OI8cd4V8Ssono1IQB35ypPmMrb767NqylzFXLk4bkacVakrXWQx6cymE/COnr0aHn33XclOjpa0tPTdf9jYmIkISFBhwPgucKTNez999+XAQMGSJs2bWT69OnSsGFDY5fehoeHaw+3SZMmOo/jp02bVqqOt8zqCbtl97Kj6uY8LiMfnKWmMiJZpy5pwcvNKlDpnDJ5/FAmvRQrs9+Jk7QD5+XLgStl9ee79WkglB92nSUpu89K3Ff75aO+C3U5fqSYckF0Dds656Dc80QbnUV58pZTclv3pjqPH+eYnnMlWQnUqn/vlvFPLTUOM7eFeUXyab9vZOVnO+SoehiM7T1fe7yoUJHj5w37XuKm7ZfaDWuYbRqJhR9ultNJmVoUpryyWqa/sUbn/zNghWz67wGjmrmtGhYsE59foVnhxz/pxVipVjNUfC2/kH5JJr+8SodD8NBa9a+dUqNOmBJ29+VmB1QiI+WizBkaZxZB1JeOjdf5/JxC+acaiw0qFAKR++D+r7UQm5VVAkL+mQqzbFHjkn44S/760BxTIK31EtedkM/7L9fjmZl6UQvxBjXWhm1bkKQeiEk6u/aLBPn3b78tc48ZdY3tN2O2yrz3NsqF05fkyxdW6nsH+3CuCc8sk/VT9slhdX/8/dEFAkGFoe1xavzxENsy66CMfXi+4Dq9mTtRNeKu3o7zdZ+7kICvbdhRH46Z1eBNQ1S92fUWf099CfG0w1P5pEmTBAI7cuRI6dChg2RnZ8v48eN1OADlEN2KGsIG8H4NQ/wEn4raXY+1NgP3I34yU04knJVOv2glJ9WPEnZn39Z6a81DTIPVNHnQ5F4SXDVIonu1kAXvb5Lug6IlIfa4NGhZR34x5B593MpxO7XnE9EgXN5c8pguwxcEfPuiw/LGgj66DB7u7T2bS1Cw8zm15G/x0uOljtLthdv1/onPL5f05CydNr4gcCGhwfLH2Y/qoqbRUUr0EqX5HQ2kvOOXKMGB8Lwy4+f6GuDtwYKCq2hB1JkfvnAz/n7iQ7q8UZtI2f3tEbn3ybamMOGYRq3rSrcBHWTBB5vkovKcHn3rbql7U03dgi/lMf3ays4lR2SF4hb31T55WfUPTDyVW/tt7bNrGt5epOrPwEm99K5aUTtkrxqru3/lfLChMD/nstz1eGt1bbeq6azokMymrxPl8RE/dW1ObmhTV16d5eS+5os9ZfZbC3A/GZ6hcY81vT3KWkXfM11/30Fq1a8uLe5spDl2ebadroNxffbTB3X6239s07OhlqoOrMuzt8mDA533yKdPLNbx+g4/a673uX65E1XXOoGW9+Z9IgQArbB6rLh+b8dcTz5OJajgGSGmiKUOHTpUTp8+bcZK8ZYAPNeIiAgdAK9gc1ddDYJnWITy3LLVlLciBkGDqMJa3tVI0tV0EFPWDj2a6bJRD84W/Ag692klNetV02XWr0Pfp8pN7epJuPLGYJjKQTwMg8DffO+NRlYLQsOb65h5JDAdbXtfY7Ps1m5NZc+KYzr84O14nBuLZD3/eIeEhocIpsXwfPCZ+efST3g0Hlo9xBTb2g3DdVjA3THdX1KzECX+eGhAnAzztfw3f71fVo7bocX7xraRRjPiWu6uD2Zll8SJhHPS2sKz12udSokqqldXsW48FOcOi5OPH1sk21UY5lKm84Hj0pxY7xvXfa55a11P91grdQ+tn7JXj8GikZslV818DAurWdVIyi1dbpKDG66EnsJqXNnXpktjObDhpFnXmkjenKY9bHdvAFjfELAeE8hpiCoEFZ/K4qG68vbJYx00aJAMHjxYatSoITNnzpSkpCSpW7euns4/+eSTWlwPHz7seg7Jz8+XefPmSdOmzqlymQp+LIDXBK+umrrJq6q45KuzHpGMExf1D3Psz+fL4OW/0t6StYuIV8b82hlPRYwOsVircEa1qC0IRXizBi1rS172lTrZarqMfsCD9HZ89Vqh0vtPd8rsIXEyeNnjWtzfUn30xfBQcT0G8T6EQsAjRz1k4H3BfC1HrDE8IkxPfSHS8B5hruWufYAH7um1ngYqZmx4t87Wyn4jnvzVa9/JC1/2lMbqoYfpNx5eFTFvb3JU5Pj/vrVe7lbecs9XO+kwxOe/W+b2sOyzeVIjsuyDGpUxU6jpYd/NMTfqNwPcNhrAhfBI3XmgEFSUuxNVX2a81xKdTx7rokWLZMKECTqOunjxYikocApDVFSUfnr0799fdu7cafYXIQK8p4pFKixqQWC9Gf5owIjdeqtX3r5QJZIFeVfioa55xLIyUrK1d4aYXKt7GmlRXfr3ePla/UjqNaklPV7uqD09iA0MYgvDDzxlz1m55b6bdH6zio9ZF61QGP1wC4mfnyRFhcU6Ljv8XoQpnOEJfZD6uuORVtpDhXBhEQsLH23vd3qw3o5voqahXZ5pJ+2Vdz3jz2v1NRht/tgtBHDmX9bJQ690lJ+oMAHizzBfy+H1zxu+UV6c9rAOAcCLg3kq1zt/+ML0PC+7ULLScnTJka2nzd3RvVvoODpi3RBBxICNKbwxLvC2IeJoB4tYiMViC8MWsXd31kyFXk6o8UQdfCoqxsZ54XljgapZxwYSrGZCWIAzzovzoV8Y38v5RbLjm8PSrqtzPQH7UtVxMCwuYoEPsxbaFQLWFf8rpXhYe461PvDAA9aqfkv75LEeO3ZM+vTpI6NGjZKePXvqNwI6duyonxwQVKz24xUswyC8vXv3lrFjx0pkZKS54o/XtvAGAd4CwJMHhnbWr1+vF6/mzJmjy37sV/seTeXz55arVfHL8szH3ZQIXcl3fzFa/+i/m7hHLxxAOJ+f8DN9qvv7t5ev1HuiiKWFhIUIftBY9Yf4YTHkw+3PaE+206OtdAwPbwtg8Qyeo9XufryN7P9ulUBQ8frVA6rdJh3qazE36sHDRfxutGq3mvJCMW3+3fjueren448qb9CwX74bo6e8a/+zx4zlGvt83W6Yulc/AO5TMT+IAhbe8KYF2GBhrqLlu9VbAJ373CyNb6svvx7VRT765SK5TYnF4tFb3JbXbx5hdhXhmYfUw+wffRZK/WYREtm4lunBIuzS+t4b9KIVpvwI3+Dhgofc6B5zZFjcbwQCian28JiZ0kCxRUz21MFM3T7eAsEC09sry3r2LTo11DFmjPmNt9ZTIaJg9UQxu+U2YT1vRFS4PPKXu2T800u1l48+4AFgXYjCQwshHCw0PvHBlZgvxP4LtaCI8ABi9M1UPNZqmPqXN9W/2leuPM0SrP3wVxrepzuvFa9cwdwtZMGbrRSmwFbY1B8GOFJSUhzjxo3Tx6iFJ4dazDKP79u3r6Ndu3aO119/3SwzEitWrHAoMfb4UW8E6KpKnI1DrmqrvEVHQe5lsw0jn5qY4RjaeZoux/6SErOKmVBi4lACY+aRUCKq82qBx3EuJVunlafiWPbRNp1296V+XGXaca1XXFS6n9b9FTneWj8Q0pcLityOCa7NGEPrdRrjYpQpz9BIltq61iu1U2U8Hedaz8i7todxxMdq6yYnOKb8YZUuwlhaTb2N4oibvt/tPmu965lWgoRHittTetvn9gCbCpWI6j4Z58dWebL6Yy0zym067VU3456ih2aVN1pqT0ZGhkO9FWCW5eXlOXJycsx8ZUxYhbUy9o99ChwCVmF1vSqrsLru81feVajc5f3RNwipu74YZcqrdUCAK5MFK9d5uOpghQyxDatVr15dwsKcK+MoDwkJkdDQUGuVSpcOUlNzrPRiak4jgWtJAOENhDXwBxuuFhpeVW64JdJcJHTd76+867uj1n4ogdNTc2vZ9UgjHGDIFDQIIUkYyrGGg33NmzfXZZXly+d/wlJZOl5e7Kmy9JP9IAFfCFyLF/59OT/r2kPg/1ZY7bl8tkICJEAC9hPw6XUr+0/PFkmABEgg8AhQWANvTHlFJEACfiZAYfXzAPD0JEACgUeAwhp4Y8orIgES8DMBCqufB4CnJwESCDwCFNbAG1NeEQmQgJ8JUFj9PAA8PQmQQOARoLAG3pjyikiABPxMgMLq5wHg6UmABAKPAIU18MaUV0QCJOBnAhRWPw8AT08CJBB4BCisgTemvCISIAE/E6Cw+nkAeHoSIIHAI0BhDbwx5RWRAAn4mQCF1c8DwNOTAAkEHgEKa+CNKa+IBEjAzwQorH4eAJ6eBEgg8AhQWANvTHlFJEACfiZAYfXzAPD0JEACgUeAwhp4Y8orIgES8DMBCqufB4CnJwESCDwCFNbAG1NeEQmQgJ8JUFj9PAA8PQmQQOAR+B/jw6jtCKO9MQAAAABJRU5ErkJggg==" width="342" height="75" class="img_ev3q"></p>
</li>
<li class="">
<p>設定 Cloud Scheduler 基本資料
圖中頻率為 每日早上 9 點半與晚上 6 點半打卡
<img decoding="async" loading="lazy" alt="Cloud Scheduler Step 1" src="https://www.k1dav.fun/assets/images/cs_1-c55b3973c8f597c07fdd33dc05f45ac2.png" width="546" height="696" class="img_ev3q"></p>
</li>
<li class="">
<p>設定 請求內容</p>
</li>
</ol>
<ul>
<li class="">token 為 Github Personal Token<br>
需有執行 workflow 權限</li>
<li class="">url 為 workflow 觸發的網址
參考文件取得 - <a href="https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event" target="_blank" rel="noopener noreferrer" class="">Gihub - Create a workflow dispatch event</a></li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">payload</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"payload"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"token"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"url"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://api.github.com/repos/k1dave6412/104ClockIn/actions/workflows/42459444/dispatches"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<blockquote>
<p>在「內文」貼上上面的 payload，記得把 <code>token</code> 換成自己的 GitHub Personal Token。（原截圖含 token，已移除）</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="常見問題">常見問題<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E5%B8%B8%E8%A6%8B%E5%95%8F%E9%A1%8C" class="hash-link" aria-label="常見問題的直接連結" title="常見問題的直接連結" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="沒有抓到瀏覽器">沒有抓到瀏覽器<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E6%B2%92%E6%9C%89%E6%8A%93%E5%88%B0%E7%80%8F%E8%A6%BD%E5%99%A8" class="hash-link" aria-label="沒有抓到瀏覽器的直接連結" title="沒有抓到瀏覽器的直接連結" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">╔════════════════════════════════════════════════════════════╗</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║ Looks like Playwright was just installed or updated.       ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║ Please run the following command to download new browsers: ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║                                                            ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║     playwright install                                     ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║                                                            ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">║ &lt;3 Playwright Team                                         ║</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">╚════════════════════════════════════════════════════════════╝</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="原因">原因<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E5%8E%9F%E5%9B%A0" class="hash-link" aria-label="原因的直接連結" title="原因的直接連結" translate="no">​</a></h4>
<p>沒有安裝必要的測試瀏覽器</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="解法">解法<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E8%A7%A3%E6%B3%95" class="hash-link" aria-label="解法的直接連結" title="解法的直接連結" translate="no">​</a></h4>
<p>執行 <code>playwright install</code> 或參考步驟 2</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="參考資料">參考資料<a href="https://www.k1dav.fun/blog/2022/12/08/104#%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99" class="hash-link" aria-label="參考資料的直接連結" title="參考資料的直接連結" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://playwright.dev/" target="_blank" rel="noopener noreferrer" class="">Playwright</a></li>
<li class=""><a href="https://playwright.dev/python/docs/browsers" target="_blank" rel="noopener noreferrer" class="">Playwright - Browsers</a></li>
<li class=""><a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token" target="_blank" rel="noopener noreferrer" class="">Gihub - Creating a personal access token</a></li>
<li class=""><a href="https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event" target="_blank" rel="noopener noreferrer" class="">Gihub - Create a workflow dispatch event</a></li>
</ul>]]></content:encoded>
            <category>104</category>
            <category>python3</category>
            <category>playwright</category>
            <category>github action</category>
            <category>cloud scheduler</category>
            <category>cloud function</category>
        </item>
        <item>
            <title><![CDATA[好用工具區]]></title>
            <link>https://www.k1dav.fun/blog/recommendation_site</link>
            <guid>https://www.k1dav.fun/blog/recommendation_site</guid>
            <pubDate>Tue, 29 Nov 2022 12:00:00 GMT</pubDate>
            <description><![CDATA[打給賀]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="打給賀">打給賀<a href="https://www.k1dav.fun/blog/recommendation_site#%E6%89%93%E7%B5%A6%E8%B3%80" class="hash-link" aria-label="打給賀的直接連結" title="打給賀的直接連結" translate="no">​</a></h2>
<p>這邊會放置一些常用的網址</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="產生-vscode-snippet">產生 VSCode Snippet<a href="https://www.k1dav.fun/blog/recommendation_site#%E7%94%A2%E7%94%9F-vscode-snippet" class="hash-link" aria-label="產生 VSCode Snippet的直接連結" title="產生 VSCode Snippet的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://snippet-generator.app/" target="_blank" rel="noopener noreferrer" class="">snippet generator</a></li>
</ul>]]></content:encoded>
            <category>recommendation</category>
        </item>
        <item>
            <title><![CDATA[坑洞記錄表]]></title>
            <link>https://www.k1dav.fun/blog/skill_hole</link>
            <guid>https://www.k1dav.fun/blog/skill_hole</guid>
            <pubDate>Tue, 29 Nov 2022 11:00:00 GMT</pubDate>
            <description><![CDATA[打給賀]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="打給賀">打給賀<a href="https://www.k1dav.fun/blog/skill_hole#%E6%89%93%E7%B5%A6%E8%B3%80" class="hash-link" aria-label="打給賀的直接連結" title="打給賀的直接連結" translate="no">​</a></h2>
<p>這邊會放上許多要補的坑…</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="開發基礎建設">開發基礎建設<a href="https://www.k1dav.fun/blog/skill_hole#%E9%96%8B%E7%99%BC%E5%9F%BA%E7%A4%8E%E5%BB%BA%E8%A8%AD" class="hash-link" aria-label="開發基礎建設的直接連結" title="開發基礎建設的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://www.gitpod.io/" target="_blank" rel="noopener noreferrer" class="">Gitpod</a></li>
</ul>
<blockquote>
<p>以容器化的方式在雲端進行開發</p>
</blockquote>
<ul>
<li class=""><a href="https://about.gitlab.com/" target="_blank" rel="noopener noreferrer" class="">GitLab</a></li>
</ul>
<blockquote>
<p>程式碼的家</p>
</blockquote>
<ul>
<li class=""><a href="https://www.readfog.com/a/1632555420399800320" target="_blank" rel="noopener noreferrer" class="">CI/CD</a></li>
</ul>
<blockquote>
<p>再也不用手動部署了</p>
</blockquote>
<ul>
<li class="">
<p><a href="https://github.com/features/actions" target="_blank" rel="noopener noreferrer" class="">Github Action</a></p>
</li>
<li class="">
<p><a href="https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows" target="_blank" rel="noopener noreferrer" class="">Github Action Cache</a></p>
</li>
<li class="">
<p><a href="https://code.visualstudio.com/docs/devcontainers/containers" target="_blank" rel="noopener noreferrer" class="">Dev Container</a></p>
</li>
<li class="">
<p><a href="https://www.netlify.com/" target="_blank" rel="noopener noreferrer" class="">Netlify</a></p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="版本控制">版本控制<a href="https://www.k1dav.fun/blog/skill_hole#%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6" class="hash-link" aria-label="版本控制的直接連結" title="版本控制的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer" class="">Git</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="程式語言">程式語言<a href="https://www.k1dav.fun/blog/skill_hole#%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80" class="hash-link" aria-label="程式語言的直接連結" title="程式語言的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://www.typescriptlang.org/" target="_blank" rel="noopener noreferrer" class="">TypeScript</a></li>
<li class=""><a href="https://leetcode.com/" target="_blank" rel="noopener noreferrer" class="">LeetCode</a></li>
<li class=""><a href="https://graphql.org//" target="_blank" rel="noopener noreferrer" class="">GraphQL</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="編輯器">編輯器<a href="https://www.k1dav.fun/blog/skill_hole#%E7%B7%A8%E8%BC%AF%E5%99%A8" class="hash-link" aria-label="編輯器的直接連結" title="編輯器的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://code.visualstudio.com/" target="_blank" rel="noopener noreferrer" class="">VS Code</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="智能家居">智能家居<a href="https://www.k1dav.fun/blog/skill_hole#%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85" class="hash-link" aria-label="智能家居的直接連結" title="智能家居的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://www.home-assistant.io/" target="_blank" rel="noopener noreferrer" class="">Home Assistant</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="單元測試">單元測試<a href="https://www.k1dav.fun/blog/skill_hole#%E5%96%AE%E5%85%83%E6%B8%AC%E8%A9%A6" class="hash-link" aria-label="單元測試的直接連結" title="單元測試的直接連結" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://playwright.dev/" target="_blank" rel="noopener noreferrer" class="">Playwright</a></li>
</ul>]]></content:encoded>
            <category>hello</category>
        </item>
        <item>
            <title><![CDATA[Welcome]]></title>
            <link>https://www.k1dav.fun/blog/welcome</link>
            <guid>https://www.k1dav.fun/blog/welcome</guid>
            <pubDate>Tue, 29 Nov 2022 10:00:00 GMT</pubDate>
            <description><![CDATA[打給賀]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="打給賀">打給賀<a href="https://www.k1dav.fun/blog/welcome#%E6%89%93%E7%B5%A6%E8%B3%80" class="hash-link" aria-label="打給賀的直接連結" title="打給賀的直接連結" translate="no">​</a></h2>
<p>我的 Docusaurus 第一天開張哦！</p>
<p>Docusaurus 的 Logo 真的很可愛
一定要讓你看看！
<img decoding="async" loading="lazy" alt="Docusaurus Plushie" src="https://www.k1dav.fun/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p>]]></content:encoded>
            <category>hello</category>
            <category>docusaurus</category>
        </item>
    </channel>
</rss>