白色海韵 發表於 2022-11-24 17:59:00

麒麟桌面系统自动化方案 pyautogui+pythonnet

<p>麒麟系统模拟鼠标的点击、滑动等操作,键盘输入等操作</p>
<p>pyautogui的安装见上篇文章</p>
<p>可以通过pythonnet封装python脚本,实现点击和输入等操作做到自动化</p>
<p>鼠标移动</p>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> DoMoveTest()
      {
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
            {
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">PythonEngine.IsInitialized)
                {
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (OperatingSystem.IsWindows())
                  {
                        Runtime.PythonDLL </span>= <span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">python310.dll</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
                  {
                        Runtime.PythonDLL </span>= <span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">libpython3.8.so</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  PythonEngine.Initialize();
                }
                </span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> (Py.GIL())
                {
                  </span><span style="color: rgba(0, 0, 255, 1)">dynamic</span> pyautogui = Py.Import(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pyautogui</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyautogui.moveTo(Convert.ToInt32(X), Convert.ToInt32(Y), </span><span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">);
                }
               
            }
            </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
            {
                LogHelper.logHelper.ErrorLog(ex.Message);
            }
      }</span></pre>
</div>
<p>键盘输入等</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> DoInputTest()
      {
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
            {
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">PythonEngine.IsInitialized)
                {
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (OperatingSystem.IsWindows())
                  {
                        Runtime.PythonDLL </span>= <span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">python310.dll</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
                  {
                        Runtime.PythonDLL </span>= <span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">libpython3.8.so</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
                  }
                  PythonEngine.Initialize();
                }
                </span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> (Py.GIL())
                {
                  </span><span style="color: rgba(0, 0, 255, 1)">dynamic</span> pyautogui = Py.Import(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pyautogui</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyautogui.moveTo(Convert.ToInt32(X), Convert.ToInt32(Y), </span><span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyautogui.click();
                  pyautogui.moveRel(</span><span style="color: rgba(128, 0, 128, 1)">100</span>, -<span style="color: rgba(128, 0, 128, 1)">590</span>, <span style="color: rgba(128, 0, 128, 1)">0.5</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyautogui.click();
                  </span><span style="color: rgba(0, 0, 255, 1)">dynamic</span> pyperclip = Py.Import(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pyperclip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyperclip.copy(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">音乐</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
                  pyautogui.hotkey(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ctrl</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">v</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
                }
            }
            </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
            {
                LogHelper.logHelper.ErrorLog(ex.Message);
            }
      }</span></pre>
</div>
<p>以上代码仅用于测试,使用pythonnet执行python脚本,执行完毕后要注意<span style="color: rgba(0, 0, 0, 1)">PythonEngine的关闭问题</span></p><br><br>
来源:https://www.cnblogs.com/njcxwz/p/16922734.html
頁: [1]
查看完整版本: 麒麟桌面系统自动化方案 pyautogui+pythonnet