【浏览器操控示例】示例演示的是,用网页按钮来控制AHK

AHK操控浏览器入门教程

以下示例需要Chrome.ahk库支持才能工作

; By 空
#NoEnv
SetBatchLines, -1

#Include <Chrome>

TestPages := 3


; --- Define a data URL for the test page ---

; https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
DataURL =
( Comments
<!DOCTYPE html>
<html>
  <head>
    ; Use {} to allow text insertion using Format() later
    <title>Test Page {}</title>
  </head>
  <body>
    <button class="someclass">Click Me!</button>
  </body>
</html>
)


; --- Define some JavaScript to be injected into each page ---

JS =
( Comments
; Using a self-invoking anonymous function for scope management
; https://blog.mgechev.com/2012/08/29/self-invoking-functions-in-javascript-or-immediately-invoked-function-expression/
(function(){
  var clickCount = 0;
  
  ; Whenever the button tag with class someclass is clicked
  document.querySelector("button.someclass").onclick = function() {
    clickCount++;
    
    ; Prefix the message with AHK: so it can be
    ; filtered out in the AHK-based callback function
    console.log("AHK:" + clickCount);
  };
})();
)


; --- Create a new Chrome instance ---

; Define an array of pages to open
DataURLs := []
Loop, %TestPages%
{
  File := Format("{}\{}.html", A_Temp, A_Index)
  FileDelete, % File
  FileAppend, % Format(DataURL, A_Index), % File
  DataURLs.Push(File)
}

; Open Chrome with those pages
ChromeInst := new Chrome("User_Data", DataURLs)


; --- Connect to the pages ---
PageInstances := []
Loop, %TestPages%
{
  ; 不加延时容易报错
  Sleep, 2000
  ; Bind the page number to the function for extra information in the callback
  BoundCallback := Func("Callback").Bind(A_Index)
  
  ; Get an instance of the page, passing in the callback function
  if !(PageInst := ChromeInst.GetPageByTitle(A_Index, "contains",, BoundCallback))
  {
    MsgBox, Could not retrieve page %A_Index%!
    ChromeInst.Kill()
    ExitApp
  }
  PageInstances.Push(PageInst)
  
  ; Enable console events and inject the JS payload
  PageInst.WaitForLoad()
  PageInst.Call("Console.enable")
  PageInst.Evaluate(JS)
}

MsgBox, Running... Click OK to exit


; --- Close the Chrome instance ---

try
  PageInstances[1].Call("Browser.close") ; Fails when running headless
catch
  ChromeInst.Kill()
for Index, PageInst in PageInstances
  PageInst.Disconnect()

ExitApp
return


Callback(PageNum, Event)
{
  ; Filter for console messages starting with "AHK:"
  if (Event.Method == "Console.messageAdded"
    && InStr(Event.params.message.text, "AHK:") == 1)
  {
    ; Strip out the leading AHK:
    Text := SubStr(Event.params.message.text, 5)
    
    ToolTip, Clicked %Text% times on page %PageNum%
  }
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。