吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7793|回复: 29
收起左侧

[Python 转载] 爬虫之微信发送每天60秒读懂世界

  [复制链接]
txq0211 发表于 2022-3-28 11:23
最近自学爬虫,看的公众号有人在推“每天60秒读懂世界”,尝试用爬虫实现,通过微信推送。
抛砖引玉,有请大神们多多指导。

1.Windows下打开微信,固定在屏幕左上角,这样便于我们固定微信上各个控件所在坐标
2.把鼠标移动到微信左边的“通讯录”按钮上,单击,打开通讯录
3.把鼠标移动到搜索框把你要找的人的微信名复制进去,回车,打开对话框
(你要问我为什么要先打开通讯录再去搜索框搜?百度很多,大多失效了,就这个有效,微信部分代码我是抄脚本之家的)
4.通过爬虫获取每天60秒都懂世界内容,回车或者alt+s 发送
上效果图:


微信截图_20220328110331.png
上代码:
[Python] 纯文本查看 复制代码
# Pycharm使用Alt+Enter大法,自动安装软件包
import requests
import win32clipboard as w
import win32con
import win32api
import win32gui
import time
import requests
from parsel import Selector
# 爬虫
def getUrl(url):
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'}
    response = requests.get(url=url,headers=headers)
    return response

# 把文字放入剪贴板
def setText(aString):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
    w.CloseClipboard()

# 模拟ctrl+V
def ctrlV():
    win32api.keybd_event(17, 0, 0, 0)  # ctrl
    win32api.keybd_event(86, 0, 0, 0)  # V
    win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键
    win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)

# 模拟alt+s
def altS():
    win32api.keybd_event(18, 0, 0, 0)
    win32api.keybd_event(83, 0, 0, 0)
    win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)

# 模拟enter
def enter():
    win32api.keybd_event(13, 0, 0, 0)
    win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)

# 模拟单击
def click():
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

# 移动鼠标的位置
def movePos(x, y):
    win32api.SetCursorPos((x, y))

if __name__ == "__main__":
    name = input('请输入消息接收人:')
    # 获取鼠标当前位置
    # hwnd=win32gui.FindWindow("MozillaWindowClass",None)
    hwnd = win32gui.FindWindow("WeChatMainWndForPC", None)
    win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
    win32gui.MoveWindow(hwnd, 0, 0, 1000, 700, True)
    time.sleep(0.01)
    # 1.移动鼠标到通讯录位置,单击打开通讯录
    movePos(28, 147)
    click()

    # 2.移动鼠标到搜索框,单击,输入要搜索的名字
    movePos(148, 35)
    click()
    setText(name)
    ctrlV()
    time.sleep(1)  # 别问我为什么要停1秒,问就是给微信一个反应的时间,他反应慢反应不过来,其他位置暂停的原因同样
    enter()
    time.sleep(1)
    # 3.复制要发送的消息,发送
    time.sleep(1)
    url = 'https://www.zhihu.com/people/mt36501'
    html = Selector(getUrl(url).text)
    links = 'https:%s' % html.css('.ContentItem-title span a::attr(href)').get()
    content_html = Selector(getUrl(links).text)
    contents = content_html.css('.RichText p::text').getall()
    content = '\n'.join(contents)
    setText(content)
    ctrlV()
    altS()



后续:如果要发多人,可以做一个字典,或者做一个Excel表格循环读取发送,这里不多叙述。

免费评分

参与人数 7吾爱币 +5 热心值 +6 收起 理由
氨基酚 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chowhong + 1 + 1 我很赞同!
ciss520 + 1 如果微信已经显示界面而且不在最前端的情况下,会操作失败
Duke0910 + 1 谢谢@Thanks!
lua11 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
情绪666 + 1 + 1 我很赞同!
我的睡公主 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| txq0211 发表于 2022-3-28 13:57
本帖最后由 txq0211 于 2022-3-28 14:00 编辑

懒得修改了,不用接口也是一方面特点
接口版本,加上import json,替换73-78行
[Python] 纯文本查看 复制代码
import requests,json
from parsel import Selector

def getUrl(url):
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'}
    response = requests.get(url=url,headers=headers)
    return response
if __name__ == '__main__':
    url = 'https://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1'
    data = json.loads(getUrl(url).text)["data"][0]["content"]
    content = '\n'.join(Selector(data).css('p::text').getall())
    print(content)
情绪666 发表于 2022-3-28 14:38

可以的话其实用方糖或者企业微信做推送会方便一些,我之前写的用的方糖的,每天早...

本帖最后由 情绪666 于 2022-3-28 14:40 编辑

[quote]txq0211 发表于 2022-3-28 13:57
懒得修改了,不用接口也是一方面特点
接口版本,加上import json,替换73-78行
[Python] 纯文本查看 复制代码
#可以的话其实用方糖或者企业微信做推送会方便一些,我之前写的用的方糖的,每天早上七点定时推送,只是定时时间是自己算的,用死循环写的也不太好{:1_937:}

[mw_shl_code=python,true]
# -*- coding: utf-8 -*-
# [url=home.php?mod=space&uid=238618]@Time[/url] : 2021/11/26 9:58
# [url=home.php?mod=space&uid=686208]@AuThor[/url] : Melon
# [url=home.php?mod=space&uid=406162]@site[/url] :
# [url=home.php?mod=space&uid=786562]@note[/url] :
# [url=home.php?mod=space&uid=267492]@file[/url] : today60.py
# @Software: PyCharm
import logging
import time
import traceback
from datetime import datetime, timedelta

import requests
from lxml import etree

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

BASE_URL = 'http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1'

FT_SERVER_URL = 'https://sctapi.ftqq.com/方糖key.send'


def send_msg(title, message):
    data = {
        'title': title,
        'desp': message,
    }
    post = requests.post(url=FT_SERVER_URL, data=data)
    logger.info(post.text)


def start():
    response = requests.get(url=BASE_URL, headers={"User-Agent": None})

    response_json = response.json()

    response_json_data = response_json['data']

    data_content = response_json_data[0]['content']
    # xpath解析
    html = etree.HTML(data_content)
    image = html.xpath("//figure/img/@data-original")[0]
    st = '\n\n【 %s 】 %s \n\n\n\n' % (response_json_data[0]['title'], image)
    # print(image)
    p_text = html.xpath("//p/text()")
    for text in p_text:
        st += text + '\n\n'
    send_msg(response_json_data[0]['title'], st)
    return st


if __name__ == '__main__':
    while True:
        try:
            # 定时
            now = datetime.now()  # 记录当前时间

            sched_time = datetime.strptime(str(now.replace(hour=7, minute=00, second=00))[:19], '%Y-%m-%d %H:%M:%S')
            total_seconds = (sched_time - datetime.now()).total_seconds()  # 两个时间的差值

            if total_seconds < 0:
                now += timedelta(days=1)
                # 过了今天的 7 点,计算明天 7 点,进行定时
                sched_time = datetime.strptime(str(now.replace(hour=7, minute=00, second=00))[:19], '%Y-%m-%d %H:%M:%S')
                sched_time_total_seconds = (sched_time - datetime.now()).total_seconds()  # 两个时间的差值
                logging.info('当前时间: %s\t距离下次发送时间: %s\t还差: %s 秒' % (str(datetime.now()), sched_time, sched_time_total_seconds))
                time.sleep(sched_time_total_seconds)
            else:
                logging.info('当前时间: %s\t距离下次发送时间: %s\t还差: %s 秒' % (str(datetime.now()), sched_time, total_seconds))
                time.sleep(total_seconds)

            # 定时完成,开始发送
            s = start()
            logging.info(s)
        except Exception as e:
            traceback.print_exc()
            logging.error('------- error -----> %s', e)
            time.sleep(5)

zfj68888 发表于 2022-3-28 11:52
估计是我太菜了,不是太懂呢,有更直接点的工具吗。
 楼主| txq0211 发表于 2022-3-28 11:58
zfj68888 发表于 2022-3-28 11:52
估计是我太菜了,不是太懂呢,有更直接点的工具吗。

可以转成程序
kof21411 发表于 2022-3-28 12:00
用按键精灵不是更放便吗?
情绪666 发表于 2022-3-28 12:02
 楼主| txq0211 发表于 2022-3-28 12:22
情绪666 发表于 2022-3-28 12:02
接口 http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1

哈哈,谢谢,之前没找到,只好用笨方法
 楼主| txq0211 发表于 2022-3-28 12:24
情绪666 发表于 2022-3-28 12:02
接口 http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1

主要还是想要每天自动获取最新,明天试试这个接口
等待穿山乙 发表于 2022-3-28 12:26
txq0211 发表于 2022-3-28 12:24
主要还是想要每天自动获取最新,明天试试这个接口

速度更新
d8349565 发表于 2022-3-28 13:08
个人偏好使用这个库制作RPA工具
[Python] 纯文本查看 复制代码
import pyautogui
血情 发表于 2022-3-28 13:33
有软件,就更好啦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表