Grup WeChat adalah tempat umum di mana teman-teman yang berpikiran sama berkumpul, dan grup WeChat dalam lingkaran perdagangan kuantitatif tidak terkecuali.
Untuk alasan ini, saya mungkin melihat antarmuka WeChat dan menemukan bahwa akun resmi diperlukan, yang tidak sangat nyaman. Jadi saya memutuskan untuk mengambil pendekatan yang berbeda dan mencoba solusi berikut. Karena kapasitas terbatas saya, hanya fungsi paling dasar dari persyaratan ini yang dapat diselesaikan, dan itu hanya untuk referensi.
Saya memutuskan untuk menggunakan Golang untuk menulis, perlu menggunakan perpustakaan Golanggithub.com/go-vgo/robotgo
, pada dasarnya persyaratan solusi dicapai oleh perpustakaan ini.
Pertama kita menjalankan program layanan di komputer kita, kode adalah sebagai berikut:
package main
import (
"fmt"
"time"
"github.com/go-vgo/robotgo"
"net/http"
"io/ioutil"
)
func postMsg (msg string) {
fmt.Println("Start the mission!")
// process ids
processIds := "WeChat"
fpid, err3 := robotgo.FindIds(processIds)
robotgo.ActivePID(fpid[0])
time.Sleep(time.Millisecond * 2000)
if err3 == nil {
fmt.Println(fmt.Sprintf("find %s", processIds), "ids:", fpid)
/* Use image recognition method to get the coordinates of the click area
arrPicFileName := []string{"pic1.png", "pic2.png", "pic3.png"}
for _, name := range arrPicFileName {
picPath := fmt.Sprintf("/xxx/xxx/Desktop/xxx/%s", name)
fmt.Println("picPath:", fmt.Sprintf("/xxx/xxx/Desktop/xxx/%s", name))
fx, fy := robotgo.FindPic(picPath)
fmt.Println("move to :", fx+10, fy+10)
robotgo.MoveMouseSmooth(fx+10, fy+10)
time.Sleep(time.Millisecond * 2000)
robotgo.MouseClick("left", false)
robotgo.TypeStr(msg)
time.Sleep(time.Second)
robotgo.KeyTap("enter")
time.Sleep(time.Second)
}
*/
// /* Fixed area coordinates, the coordinates of the upper right corner of the screen are 0,0
arrArea := []map[string]int{
map[string]int{
"x" : 190,
"y" : 200,
},
map[string]int{
"x" : 190,
"y" : 200+70,
},
map[string]int{
"x" : 190,
"y" : 200+70+70,
},
}
for _, area := range arrArea {
robotgo.MoveMouseSmooth(area["x"], area["y"])
time.Sleep(time.Millisecond * 2000)
robotgo.MouseClick("left", false)
robotgo.TypeStr(msg)
time.Sleep(time.Second)
robotgo.KeyTap("enter")
time.Sleep(time.Second)
}
// */
}
fmt.Println("The mission is complete!")
}
func Handle (w http.ResponseWriter, r *http.Request) {
b, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
fmt.Println("req body:", string(b))
postMsg(string(b))
w.Write([]byte("finished!"))
}
func main () {
fmt.Println("listen http://127.0.0.1:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe("127.0.0.1:9090", nil)
}
Fungsi dari program layanan ini adalah untuk menunggu permintaan.postMsg
fungsi untuk melakukan serangkaian klik gerakan mouse simulasi dan operasi input untuk membuka jendela perangkat lunak WeChat, klik pada area yang telah ditentukan sebelumnya, masukkan informasi dalam permintaan, dan kirim ke grup WeChat.
Klik area pada jendela WeChat untuk mengkonfirmasi dan menguji dua skenario. yang pertama adalah untuk menyimpan gambar nama kelompok WeChat, memuat layar perbandingan gambar ketikapostMsg
metode ini tidak sangat tinggi, dan kadang-kadang tidak dapat dikenali. Jadi solusi kedua digunakan, yang lebih dapat diandalkan. Ini untuk memperbaiki area klik dan merencanakan satu set koordinat dari area klik, yaitu: koordinat yang dicatat oleharrArea
variabel dalam kode di atas. Di mana koordinatnya? Jawaban: Lihat koordinat piksel dari tangkapan layar dan ukur T_T.
Program uji strategi platform FMZ:
function main() {
var msg = {
"type" : "msg",
"robotId" : _G(),
"msg" : "hello fmz!"
}
var n = 0
while(true) {
if(n == 20) {
var ret = HttpQuery("http://127.0.0.1:9090/data", JSON.stringify(msg))
Log("Exit")
break
}
n++
LogStatus(_D(), "n:", n)
Sleep(1000)
}
}
Strategi ini mensimulasikan pengiriman sinyal transaksi (ketika n==20, dengan asumsi bahwa sinyal transaksi dipicu pada saat ini, dan dianggap mungkin untuk berdagang), ia mengirim permintaan ke layanan lokal dihttp://127.0.0.1:9090/data
.
Operasi robot FMZ (docker juga berjalan secara lokal):
Jendela WeChat
Pesan push adalah:
{"type":"msg","robotId":130350,"msg":"hello fmz!"}
Rencana ini hanya untuk memulai, dan jika Anda memiliki rencana yang lebih baik, Anda dipersilakan untuk mendiskusikannya.