不使用网页微信,实现给女友发送天气情况


前言

学习了技术,是不是也会想为女朋友做点什么呢?也许你可以做一个天气提醒功能的小程序那会相当赞的。你的暖男气质,能轻易就被她发现。
在这里插入图片描述
没有女朋友?不不不,你女朋友正在赶来的路上呢。


一、程序思路

1、使用selenium库,获取中国气象局的天气信息
2、分析网页数据,确定需要的数据内容,提取有效数据
3、获取桌面图像,分析桌面信息,判断女友微信位置
4、点击输入框,复制天气数据并粘贴到文本框,发送出去

二、配置环境、安装库

具体环境的安装和库的下载就不细说,大家自行百度,主要使用的库如下:
可使用:
pip install selenium (需要安装相应浏览器驱动
pip install pyperclip
pip install aircv
pip install pyautogui
其他是系统库,不需要安装

1.引入库

from selenium import webdriver
from selenium.webdriver.common.by import By

import pyperclip
import sys
import aircv as ac
import pyautogui as auto
import time

2.获取天气数据

driver = webdriver.Chrome()
driver.get("https://weather.cma.cn/")

driver.find_element(By.ID, "searchInput").send_keys(city)

driver.find_element(By.CSS_SELECTOR, "#header > div > div > form > div > i").click()

day_time_data = driver.find_element(By.CSS_SELECTOR, "#day7Div > div.day-item.today").text

col_xs_3s = driver.find_elements(By.CSS_SELECTOR,
                               "#current-station > div > div.col-xs-4 > div.row.city_detail > div")
for col in col_xs_3s[2:]:
	day_time_data += col.text.replace("\n", ":") + "\n"

3.获取对应点击位置

原理:获取小图再大图的坐标位置
步骤:

  1. 使用全屏和女友头像对比,获取女友位置;
  2. 再通过寻找输入框位置并点击,复制粘贴天气信息到输入框;
  3. 搜索发送按键的位置,进行发送
U_img = auto.screenshot(None)
U_img.save("保存位置")

imsrc = ac.imread("刚刚保存位置")
imobj = ac.imread("对应图像位置".format(route))

match_result = ac.find_template(imsrc, imobj, 0.7)

if match_result is None:
    print("未找到匹配图像!!!")
    sys.exit(0)
x, y = match_result["result"]
print("位置坐标:({},{})".format(x, y))

if type_s == "to":
    auto.click(x, y, duration)
else:
    auto.click(x, y + 50, duration)

4.发送

pyperclip.copy(content)
auto.hotkey('ctrl', 'v')
get_Position("send3", "to", 1)

5.完整代码

不建议直接复制,主要提供一些思想。

from selenium import webdriver
from selenium.webdriver.common.by import By

import pyperclip
import sys
import aircv as ac
import pyautogui as auto
import time

# 开启自动防故障功能
auto.FAILSAFE = False
# 停顿功能
auto.PAUSE = 1


# 自动获取地区天气信息
def get_weather(city="长沙"):
    # 创建驱动
    driver = webdriver.Chrome()
    # 中国气象局官网
    driver.get("https://weather.cma.cn/")
    # 延时1秒
    time.sleep(1)
    # 输入查询城市(默认长沙,温馨提示:如不是该网站相应的自动化步骤,需自行修改)
    driver.find_element(By.ID, "searchInput").send_keys(city)
    time.sleep(1)
    # 点击搜索
    driver.find_element(By.CSS_SELECTOR, "#header > div > div > form > div > i").click()
    time.sleep(2)
    # 天气数据
    day_time_data = driver.find_element(By.CSS_SELECTOR, "#day7Div > div.day-item.today").text
    time.sleep(2)
    col_xs_3s = driver.find_elements(By.CSS_SELECTOR,
                                     "#current-station > div > div.col-xs-4 > div.row.city_detail > div")
    for col in col_xs_3s[2:]:
        day_time_data += col.text.replace("\n", ":") + "\n"
    # 返回数据
    return day_time_data


# 获取对应点击坐标
def get_Position(route="name", type_s="to", duration=1):
    # 截全屏
    U_img = auto.screenshot(None)
    U_img.save("截全屏图片存放位置")

    # 读取图像
    imsrc = ac.imread("截全屏图片存放位置")
    imobj = ac.imread("提前准备好的照片位置/{}.png".format(route))
    # 对比图像
    match_result = ac.find_template(imsrc, imobj, 0.7)
    # 判断是否找到
    if match_result is None:
        print("未找到匹配图像!!!")
        sys.exit(0)
    x, y = match_result["result"]
    print("位置坐标:({},{})".format(x, y))

    # 判断采用是相对位置还是直接位置
    if type_s == "to":
        auto.click(x, y, duration)
    else:
        auto.click(x, y + 50, duration)
    time.sleep(1)


# 发送天气数据
def sede_text(content="我来了"):
    # 复制
    pyperclip.copy(content)
    # 快捷键:粘贴
    auto.hotkey('ctrl', 'v')
    time.sleep(1)
    # 发送按键位置
    get_Position("send3", "to", 1)
    # 查看发送的是不是正确的
    print("发送内容" + content)


# 主程序
if __name__ == '__main__':
    # 获取天气数据
    content = get_weather()
    # 获取并点击对应位置
    get_Position("name", "to", 1)
    get_Position("gongju2", "rel", 1)
    # 发送
    sede_text(content)


总结

本篇文章主要是为抛砖引玉,提供一些自己的想法,还有很多地方不是特别的完善,还需改进。有什么不理解的欢迎一起交流学习。
该方法有一个很大的弊端,就是没法完全的自动化,并且发送的数据过于单一。微信还是得需要自行扫码登录,微信界面必须保持在最顶层,需要对比的图像必须明显个性,不然容易报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值