开心聊聊天信息爬取

开心聊聊天信息

# _*_ coding:UTF-8
import time
from selenium.webdriver.support.ui import WebDriverWait
from appium import webdriver
import re
import pymysql
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


class kaixinliao(object):

    def __init__(self):
        # self.db = pymysql.connect(host='localhost', port=3306, database='cfda', user='root', password='root',
        self.db = pymysql.connect(host='47.98.163.18', port=3306, database='cfda', user='root', password='root',
                                  charset='utf8')
        self.cursor = self.db.cursor()
        # 初始化参数
        self.desired_caps = {}
        self.desired_caps['platformName'] = 'Android'
        # self.desired_caps['deviceName'] = '127.0.0.1:62001'   # 夜神模拟器
        self.desired_caps['deviceName'] = 'MXF5T15C24001273'  # 华为手机
        # self.desired_caps['platformVersion'] = '5.1.1'   # 夜神模拟器
        self.desired_caps['platformVersion'] = '6.0'  # 华为手机
        self.desired_caps['appPackage'] = 'cn.rongcloud.kaixinliao'
        self.desired_caps['appActivity'] = 'cn.rongcloud.kaixinliao.ui.activity.SplashActivity'
        self.desired_caps['noReset'] = True
        self.desired_caps['unicodeKeyboard'] = True
        self.desired_caps['resetKeyboard'] = True
        self.driver = webdriver.Remote('http://192.168.31.39:4723/wd/hub', self.desired_caps)
        time.sleep(10)

        # 邮箱设置
        # 设置发件服务器地址
        self.host = 'smtp.163.com'
        # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式
        self.port = 465
        # 设置发件邮箱,一定要自己注册的邮箱
        self.sender = '[email protected]'
        # 设置发件邮箱的密码,163邮箱的授权码,等会登陆会用到
        self.pwd = 'yu17682303516'
        # 设置邮件接收人,可以是扣扣邮箱
        self.receiver0 = '[email protected]'
        self.receiver1 = '[email protected]'

        self.main()

    def get_size(self):
        x = self.driver.get_window_size()['width']
        y = self.driver.get_window_size()['height']
        return (x, y)

    def login(self):
        # 登入
        size = self.get_size()
        for i in range(2):
            x1 = int(size[0] * 0.1)
            x2 = int(size[0] * 0.9)
            y = int(size[1] * 0.5)
            self.driver.swipe(x2, y, x1, y, 1000)  # 1000毫秒内完成滑动
            time.sleep(3)

        if WebDriverWait(self.driver, 3).until(lambda x: x.find_element_by_xpath(
                "//android.widget.RelativeLayout[@resource-id='cn.rongcloud.kaixinliao:id/guide_go_home_tv']")):
            self.driver.find_element_by_xpath(
                "//android.widget.RelativeLayout[@resource-id='cn.rongcloud.kaixinliao:id/guide_go_home_tv']").click()

            time.sleep(3)

        if WebDriverWait(self.driver, 3).until(lambda x: x.find_element_by_xpath(
                "//android.widget.EditText[@resource-id='cn.rongcloud.kaixinliao:id/de_login_phone']")):
            self.driver.find_element_by_xpath(
                "//android.widget.EditText[@resource-id='cn.rongcloud.kaixinliao:id/de_login_phone']").send_keys(
                '18513031949')
            time.sleep(1)

            self.driver.tap([(108, 233), (128, 253)], 500)  # 点击500毫秒
            time.sleep(1)

            self.driver.find_element_by_xpath(
                "//android.widget.EditText[@resource-id='cn.rongcloud.kaixinliao:id/de_login_password']").send_keys(
                'yu106414511')
            time.sleep(1)

            self.driver.tap([(108, 233), (128, 253)], 500)  # 点击500毫秒
            time.sleep(1)

            self.driver.find_element_by_xpath(
                "//android.widget.Button[@resource-id='cn.rongcloud.kaixinliao:id/de_login_sign']").click()
            time.sleep(10)

    def permission(self):
        # app申请手机权限
        for i in range(2):
            # self.driver.find_element_by_xpath(
            #     "//android.widget.CheckBox[@resource-id='com.android.packageinstaller:id/do_not_ask_checkbox']").click()
            # time.sleep(1)
            self.driver.find_element_by_xpath(
                "//android.widget.LinearLayout[@resource-id='android:id/buttonPanel']").click()
            time.sleep(5)

    def data(self):
        # 获取数据
        if WebDriverWait(self.driver, 3).until(lambda x: x.find_element_by_xpath(
                "//android.widget.ImageView[@resource-id='cn.rongcloud.kaixinliao:id/rc_left']")):
            self.driver.find_element_by_xpath(
                "//android.widget.ImageView[@resource-id='cn.rongcloud.kaixinliao:id/rc_left']").click()
            time.sleep(10)

        size = self.get_size()
        while True:
            x1 = int(size[0] * 0.95)
            y1 = int(size[0] * 0.25)
            y2 = int(size[1] * 0.75)
            self.driver.swipe(x1, y2, x1, y1, 1000)  # 1000毫秒内完成滑动
            time.sleep(3)
            print('-' * 1000)
            html = self.driver.page_source
            # print(html)
            info_list = re.findall(r'<android.widget.TextView index="0" text="(.*?)"', html)
            if info_list:
                for info in info_list:
                    print(info)
                    datas = time.strftime("%Y-%m-%d", time.localtime())
                    datatimes = time.strftime("%Y-%m-%d %X", time.localtime())
                    num = self.cursor.execute(
                        'select id from kaixinliao where content="{}" and datas="{}"'.format(info[:250], datas))
                    if not num:
                        # 插入数据
                        self.cursor.execute(
                            'insert into kaixinliao(content, createtime, datas) values("{}", "{}", "{}")'.format(info,
                                                                                                                 datatimes,
                                                                                                                 datas))
                        self.db.commit()

                    if '五分快三' in info:
                        numbers = re.findall(r'===
(.*?)期', info)[0]
                        sizes = re.findall(r'期【(.*?)】', info)[0]
                        multiple = re.findall(r'】(.*?)倍', info)[0]
                        datas = time.strftime("%Y-%m-%d", time.localtime())
                        print(numbers, sizes, multiple, datas, 5)
                        nums = self.cursor.execute(
                            'select id from fen where numbers={} and datas="{}"'.format(numbers, datas))
                        if not nums:
                            # 插入数据
                            self.cursor.execute(
                                'insert into fen(numbers, sizes, multiple, datas, class) values({}, "{}", {}, "{}", {})'.format(
                                    numbers, sizes, multiple, datas, 5))
                            self.db.commit()

                            #  邮箱设置---------------------------

                            if int(multiple) > 72:
                                # 设置邮件正文,这里是支持HTML的
                                body = '<h1> 五分快三' + numbers + '期【' + sizes + '】' + multiple + '倍 </h1>'
                                # 设置正文为符合邮件格式的HTML内容
                                msg = MIMEText(body, 'html')
                                message = MIMEMultipart()
                                # 设置邮件标题
                                message['subject'] = '五分快三' + numbers + '期【' + sizes + '】' + multiple + '倍'
                                # 设置发送人
                                message['from'] = self.sender
                                # 设置接收人
                                message['to'] = self.receiver0
                                message.attach(msg)

                                try:
                                    # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL
                                    s = smtplib.SMTP_SSL(self.host, self.port)
                                    # 登陆邮箱
                                    s.login(self.sender, self.pwd)
                                    # 发送邮件!
                                    s.sendmail(self.sender, self.receiver0, message.as_string())
                                    # 发送第二人邮件
                                    s.sendmail(self.sender, self.receiver1, message.as_string())
                                    print('邮件发送成功')
                                except smtplib.SMTPException:
                                    print('邮件发送失败')

                    elif '三分快三' in info:
                        numbers = re.findall(r';
(.*?)期', info)[0]
                        sizes = re.findall(r'买《(.*?)》', info)[0]
                        multiple = re.findall(r'》(.*?)倍', info)[0]
                        datas = time.strftime("%Y-%m-%d", time.localtime())
                        print(numbers, sizes, multiple, datas, 3)
                        nums = self.cursor.execute(
                            'select id from fen where numbers={} and datas="{}"'.format(numbers, datas))
                        if not nums:
                            # 插入数据
                            self.cursor.execute(
                                'insert into fen(numbers, sizes, multiple, datas, class) values({}, "{}", {}, "{}", {})'.format(
                                    numbers, sizes, multiple, datas, 3))
                            self.db.commit()

                            #  邮箱设置---------------------------
                            if int(multiple) > 72:
                                body = '<h1> 三分快三' + numbers + '期【' + sizes + '】' + multiple + '倍 </h1>'
                                msg = MIMEText(body, 'html')
                                message = MIMEMultipart()
                                message['subject'] = '三分快三' + numbers + '期【' + sizes + '】' + multiple + '倍'
                                message['from'] = self.sender
                                message['to'] = self.receiver0
                                message.attach(msg)

                                try:
                                    s = smtplib.SMTP_SSL(self.host, self.port)
                                    s.login(self.sender, self.pwd)
                                    s.sendmail(self.sender, self.receiver0, message.as_string())
                                    s.sendmail(self.sender, self.receiver1, message.as_string())
                                    print('邮件发送成功')
                                except smtplib.SMTPException:
                                    print('邮件发送失败')
            time.sleep(30)

    def main(self):
        self.login()
        self.permission()  # 华为手机app申请权限
        self.data()


if __name__ == '__main__':
    kaixinliao()

  

猜你喜欢

转载自www.cnblogs.com/yoyo1216/p/11137763.html