关于自动化实现微信小程序公众号内容爬取
关于自动化搜索公众号/小程序这件事儿,方法千千万,我选择最简单愚笨的一种。那就是直接模拟人的搜索,不用担心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 进行授权