文章

关于自动化实现微信小程序公众号内容爬取

关于自动化搜索公众号/小程序这件事儿,方法千千万,我选择最简单愚笨的一种。那就是直接模拟人的搜索,不用担心hook微信导致账号被封。

灰常简单,人怎么操作代码就怎么写,只要系统配置和微信配置和我一样的话坐标应该都不用改。

前情说明:

系统(Windows)分辨率:1280*720

微信窗口状态:全屏

微信位置状态:中英文切换的左边

数据加载页面默认是下拉30个单位,可在scroll_and_load_all_content函数中自定义

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 微信位置
weixin_position_x = 1119
weixin_position_y = 700

# 微信主界面搜索按钮
main_search_x = 24
main_search_y = 396

# 搜索内容输入位置
input_position_x = 413
input_position_y = 253

# 搜索按钮位置
search_position_x = 847
search_position_y = 253

# 公众号选项位置
gzh_position_x = 659
gzh_position_y = 301

# 小程序选项位置
xcx_position_x = 726
xcx_position_y = 299

# 程序工作状态
is_working = False
lock = threading.Lock()

def minimize_all_windows():
    def enum_windows_callback(hwnd, _):
        if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd):
            win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
    
    win32gui.EnumWindows(enum_windows_callback, None)
    print(f"{datetime.now()} - 所有窗口已最小化")

def open_weixin():
    pyautogui.moveTo(weixin_position_x, weixin_position_y, 2)
    pyautogui.leftClick(weixin_position_x, weixin_position_y)
    pyautogui.PAUSE = 1.5
    print(f"{datetime.now()} - 微信已打开")

def open_search_web():
    pyautogui.moveTo(main_search_x, main_search_y, 2)
    pyautogui.leftClick(main_search_x, main_search_y)
    pyautogui.PAUSE = 2
    print(f"{datetime.now()} - 搜索页面已打开")

def move_and_search(search_type, search_content):
    pyperclip.copy(search_content)
    if search_type == "公众号":
        pyautogui.moveTo(gzh_position_x, gzh_position_y, 1)
        pyautogui.leftClick(gzh_position_x, gzh_position_y)
        pyautogui.PAUSE = 2
        pyautogui.moveTo(input_position_x, input_position_y, 1)
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.PAUSE = 2
        pyautogui.moveTo(search_position_x, search_position_y, 1)
        pyautogui.leftClick(search_position_x, search_position_y)
    elif search_type == "小程序":
        pyautogui.moveTo(xcx_position_x, xcx_position_y, 1)
        pyautogui.leftClick(xcx_position_x, xcx_position_y)
        pyautogui.PAUSE = 2
        pyautogui.moveTo(input_position_x, input_position_y, 1)
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.PAUSE = 2
        pyautogui.moveTo(search_position_x, search_position_y, 1)
        pyautogui.leftClick(search_position_x, search_position_y)
    else:
        raise ValueError(f"不支持的搜索类型: {search_type}")
    print(f"{datetime.now()} - 搜索完成: {search_type} - {search_content}")

def scroll_and_load_all_content():
    for _ in range(2):
        pyautogui.press('pagedown')
        time.sleep(1)
    pyautogui.press('home')
    print(f"{datetime.now()} - 页面内容加载完成")
本文由作者按照 CC BY 4.0 进行授权