精华内容
下载资源
问答
  • 2017年中国微信公众号刷量专题研究报告.pdf
  • 微信公众号主要面向名人、政府、媒体、企业等机构推出的合作推广业务。在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。 3. 公众平台 微信公众平...

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

    一丶概述

    公众号与公众平台

    1. 微信账号类型

    • 个人号
    • 公众号
      • 订阅号
      • 服务号
    • 企业号

    2. 公众号

    微信公众号主要面向名人、政府、媒体、企业等机构推出的合作推广业务。在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。

    3. 公众平台

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读公众平台开发接口文档来帮助开发。

    微信公众平台可以用来注册、管理公众号企业号

    登录网址:https://mp.weixin.qq.com/

    进入上面网址,可进行登录及注册

    注册流程:

    • step1 基本信息

    • step2 选择类型

    • step3 信息登记

    • step4 公众号信息

    • step5 完成注册后,进行登录,首先需使用手机进行扫码

    • 在手机端显示此界面,确认无误后,确定即可

    • 通过身份验证后,即可在网页端对创建的公众号进行简单配置,如下图

    • 一些简单的功能添加以及配置(需要啥配置啥即可,简单操作这里不做详细说明了)

    4. 公众号与个人号的区别

    微信公众号和个人号是完全不同的。

    微信对个人号的定位是普通用户之间的交流和通讯,微信并不鼓励和支持使用个人号进行营销推广(微信曾经大规模封杀好友过多的营销个人号)。

    而公众号则完全是为品牌推广、信息推送等服务而定制的。使用公众号,可以向关注者(即粉丝)群发图文消息,粉丝在对话界面看到消息后,可以点击跳转到一个图文页面。公众号还提供关键词自动回复等基础功能,以此可以随时、自动的和粉丝进行互动。

    除了这些基础功能之外,更大的区别是,微信针对公众号开放了很多程序接口。在这些接口的基础上,可以向粉丝提供更多的服务。此外,认证的服务号还可以申请微信支付。粉丝可以使用微信支付向进行付款(订购服务或购买商品)。所有这些,都是个人号不具备的。

    微信公众号的注册几乎是没有门槛的。不过针对不同类型的公众号,微信提供的功能不同,资质要求也不一样。

    二丶微信开发原理

    公众号主要通过

    • 公众号消息会话
    • 公众号内网页

    来为用户提供服务的。

    • 公众号消息会话

    公众号是以微信用户的一个联系人形式存在的,消息会话是公众号与用户交互的基础。

    • 公众号内网页

    许多复杂的业务场景,需要通过网页形式来提供服务。

    • 使用微信服务器提供的功能无法满足我们的需求

    设想两个场景:

    1. 公众号的消息自动回复想做的智能一些,类似于iphone的Siri,例如粉丝发送“今天的北京天气”到公众号,回复粉丝信息时要按照特定时间特定城市给予反馈;

    2. 公众号内嵌的网页需要获取浏览用户的微信头像、昵称、当前定位等信息

    • 模型分类

    无扩展应用模型

    1. 公众号消息会话

     

    2. 公众号内网页

    有扩展应用模型

    1. 公众号消息会话

    2. 公众号内网页

    • 公众号接口

    1. 公众号消息会话

    目前公众号内主要有这样几类消息服务的类型,分别用于不同的场景。

    群发消息

    公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。

    被动回复消息

    在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。

    客服消息

    在用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息,主要用于客服场景。用户的行为会触发事件推送,某些事件推送是支持公众号据此发送客服消息的,详见微信推送消息与事件说明文档。

    模板消息

    在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。

    2. 公众号内网页

    对于公众号内网页,提供以下场景接口:

    网页授权获取用户基本信息

    通过该接口,可以获取用户的基本信息

    微信JS-SDK

    是开发者在网页上通过JavaScript代码使用微信原生功能的工具包,开发者可以使用它在网页上录制和播放微信语音、监听微信分享、上传手机本地图片、拍照等许多能力。

    3.微信开发者文档

    文档链接地址:https://mp.weixin.qq.com/wiki/home/index.html

     

     

     

     

     

    展开全文
  • 微信公众号刷票思路 Python

    万次阅读 多人点赞 2019-04-29 18:39:42
    记一次微信公众号批量投票,主要记录思路,具体的公众号已打码。 主线思路: 1.分析投票所需数据(判断 是通过ip 还是 需要注册账号后才可以进行投票) 2.批量注册第三方平台的账号(若拥有大量可用微信号,则...

    记一次微信公众号批量投票,主要记录思路,具体的公众号已打码。

    主线思路:

    1.分析投票所需数据(判断  是通过ip  还是 需要注册账号后才可以进行投票)

    2.批量注册第三方平台的账号(若拥有大量可用微信号,则可用微信号直接替代此步)

    3.利用已注册的账号进行遍历,随机投票,每日循环。

     

    实施步骤:

    1.使用  mitmproxy 监测 投票过程(亦可用fiddler进行抓包),分析并记录 必要请求及所需数据。

    上图中  红色字体所标记数据为 用户数据,

    Referer 中涉及到  被投票用户的 work_id 和 library_id  ,可以通过分享页面的url获取

    data 中涉及到 被投票用户的work_id 和 投票者的token ,投票者的token 是每个用户特有的识别码,故需要进行注册账号

      注:请求所需的 代理ip 下方有介绍,主要是通过实时爬取 站大爷的可用ip 来实现。

     

    2. 注册该公众号平台的账号,并使用 selenium 模拟chrome访问,获取控件并填写信息。

    图中信息均为必填信息,

    昵称, 现在各种平台比较多,可以比较快捷的获取大量用户名,或者自己编辑

    密码、确认密码  更不用说,是比较容易填写的,初看比较困难的是如何获取到大量的手机号,以及能得到其验证码

    因为国家针对sim卡实行实名制,所以正规渠道比较少。在网上搜索后发现,

    ①. 有很多的接码平台可以实现此类功能,但是大多要付费、还有很多api要了解,乍一看比较麻烦,就没有使用这种办法。

    ②.  还发现有一些机构个人会在网上免费公开少量的手机号,可以在线接收短信注册码验证码(例 点击查看),类似的网站如果需要可以自行在网上搜索。此方法的确可以使用,但是实操时发现很多手机号发送验证码后不能及时接收到,即同一时间有很多用户使用,导致运营商延迟较大。所以也没使用这种办法。

    ③. 最后因为找不到手机号,就 按了F12 ,这下才发现,原来每次点击 验证码后,都会响应到一个json串,即验证码,于是得来全不费工夫。最后自己随机生成手机号,并获取响应到的json串,以此达到 获取验证码的效果。至此,批量注册账号的问题得以解决了。

    注册完账号后,发现 用户的token值 并不会显示出来,

    于是在网页的js中开始检索, 发现 通过  get_user_token()  方法可以直接获取当前用户的token,在F12 的 console 中调试后发现可行。就通过此方法获取的 token 值。

     

    3. 获取大量 实时免费的高匿代理ip。

    通过前两步,已经可以实现注册账号、进行投票了,但没有高匿代理ip,极易被人察觉,所以这一步就是想办法获取代理ip了。

    初步调研了目前主流的免费的代理ip网站,最终选择了站大爷,因为每个小时都更新,而且使用公众号的主站测试了一下,发现大部分是可以成功访问的。

     

    项目中使用的:

    数据库:SSDB,详细信息可参见git

    代理ip池:  proxy_pool,详细信息可参见git

    为了尽量少的影响他人服务器,我的请求速度写的极慢,按需修改。

     

    代码部分:

    1,​投票

    import json
    import random
    import time
    import pyssdb
    import requests
    from selenium import webdriver
    
    class vote_wechat(object):
        """
        投票部分
    
                先 请求 upload_visit 上传服务器数据,返回值为result: 1 说明被服务器认可
                然后 请求add_praise 上传token ,服务器返回成功
    
        requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')
            此行的意思是  请求局域网内的代理ip库,从中随机取一个可用ip
            可以根据自己的配置情况自行修改
    
        """
    
        def __init__(self,
                     token="******",
                     proxy={'http': requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')}):
    
            # 默认微信用户 - 小号
            self.token = token
            # 默认代理ip - 随机选取
            self.proxy = proxy
    
            # 被投票人信息
            work_id = "******"
            library_id = "******"
    
    
            self.url = 'http://www.y***k.net/wh/api/activity/fruit/add_praise'
            Agent = [
                'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 MicroMessenger/6.7.3(0x16070321) NetType/WIFI Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 7.0; Redmi Note 4X Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.7.2.1340(0x2607023A) NetType/WIFI Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 7.1.1; vivo X20A Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.7.2.1340(0x2607023A) NetType/4G Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 7.1.1; OD105 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044208 Mobile Safari/537.36 wxwork/2.4.9 MicroMessenger/6.3.22 NetType/4G Language/zh',
                'Mozilla/5.0 (Linux; Android 7.1.1; OPPO R11st Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.7.2.1340(0x2607023A) NetType/WIFI Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 8.0; SM-G9500 Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044208 Mobile Safari/537.36 MicroMessenger/6.7.2.1340(0x2607023A) NetType/WIFI Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 8.0; DUK-AL20 Build/HUAWEIDUK-AL20; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044353 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x26070333) NetType/WIFI Language/zh_CN Process/tools',
                'Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x26070333) NetType/NON_NETWORK Language/zh_CN Process/tools',
                'Mozilla/5.0 (Linux; Android 8.1; EML-AL00 Build/HUAWEIEML-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.143 Crosswalk/24.53.595.0 XWEB/358 MMWEBSDK/23 Mobile Safari/537.36 MicroMessenger/6.7.2.1340(0x2607023A) NetType/4G Language/zh_CN',
                'Mozilla/5.0 (Linux; Android 8.1; PAR-AL00 Build/HUAWEIPAR-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 MicroMessenger/6.7.3.1360(0x26070333) NetType/WIFI Language/zh_CN Process/tools',
            ]
            self.Agent = Agent[random.randint(0, len(Agent) - 1)]
            self.headers = {
                "Host": "www.y***k.net",
                "Proxy-Connection": "keep-alive",
                "Content-Length": "101",
                "Accept": "application/json, text/javascript, */*; q=0.01",
                "Origin": "http://www.y***k.net",
                "X-Requested-With": "XMLHttpRequest",
                'User-Agent': self.Agent,
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "Referer": "http://www.y***k.net/wh/web/picture.html?page=picture&work_id={work_id}&from=singlemessage&library_id={library_id}&is_weixin=1&login_version=1&is_login=1".
                    format(work_id=work_id, library_id=library_id),
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN,en-US;q=0.9"}
            self.data = {
                "issign": "1",
                "mac": "",
                "work_id": work_id,
                "token": token}
    
        def get_proxy(self):
            return requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')
    
        def run(self):
            i = 0
            while i < 3:
                try:
                    # 投票前先请求分享页面,增加浏览数
                    url_read = 'http://www.y***k.net/wh/api/asset/info/?workID=******&mac=&token='
                    hreader_read = {
                        "Host": "www.y***k.net",
                        "Proxy-Connection": "keep-alive",
                        "Accept": "application/json, text/javascript, */*; q=0.01",
                        "Origin": "http://www.y***k.net",
                        "X-Requested-With": "XMLHttpRequest",
                        'User-Agent': self.Agent,
                        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                        "Accept-Encoding": "gzip, deflate",
                        "Accept-Language": "zh-CN,en-US;q=0.9"}
    
                    for j in range(random.randint(2, 5)):
                        # 请求分享页,增加浏览量
                        req_read = requests.get(url_read, headers=hreader_read, proxies=self.proxy)
                        time.sleep(random.random() * 10)
    
                    req = requests.post(self.url, data=self.data, headers=self.headers, proxies=self.proxy)
                    req_json = json.loads(req.content)
                    if req.status_code == 200 and 'praise_times' in req_json:
                        print('\r累计{}票,本账号今日已投{}票'.format(req_json['praise_times'], req_json['has_vote']))
                        i += 1
                        time.sleep(random.randint(2, 5))
                    else:
                        print(req_json['err_msg'])
    
                except Exception as e:
                    # self.proxy = {'http': self.get_proxy()}
                    print('遇到问题{},跳过1次'.format(e))
                    i += 1
                    time.sleep(1)
    

    2,​注册账号

    class register_user(object):
        """
        自动注册一个账号(用手机号注册账号,获取每个账号的token,一个账号需要1分钟左右时间创建)
    
         格式:
    	    ip                      账号           token
                                        小号           ******
                                        大号           ******
        :return:账号所用ip/手机号/token
    
        """
    
        def __init__(self, proxy=requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')):
            self.info_list = []
            self.token_ = 'null'
            self.proxy = proxy
            self.agent = vote_wechat().Agent
            self.nickname = self.nickname()[random.randint(0, 500)]
            self.tele_num = self.random_(17)
    
            self.regest_url = 'http://www.y***k.net/wh/web/mreg.html'
            options = webdriver.ChromeOptions()
            options.add_argument('--headless')
            options.add_argument("disable-infobars")
            options.add_argument('User-Agent={}'.format(self.agent))
            options.add_argument('--proxy-server={0}'.format(self.proxy))
            self.chrome = webdriver.Chrome(chrome_options=options)
            self.chrome.set_page_load_timeout(20)
            self.chrome.get(self.regest_url)
    
        def nickname(self):
            # 从SSDB数据库取昵称(根据自身数据情况进行替换)
            c = pyssdb.Client('192.168.1.7')
            nick = []
            user_list = c.hkeys('User_name_icon', '', '', 500)
            for i in user_list:
                rc = i.decode('utf-8').split('|,|')[1]
                nick.append(rc)
            c.disconnect()
            return nick
    
        def random_(self, up, num=9):
            """
            随机生成手机号码
            :param up: 手机号前缀,默认2位
            :param num:默认9位数
            :return:默认11位随机数字
            """
            nex = []
            for i in range(num):
                the_o = random.randint(0, 9)
                nex.append(str(the_o))
            return str(up) + ''.join(nex)
    
        def send_sms(self):
            # 发送验证码请求
            send_sms_url = 'http://www.y***k.net/wh/api/common/send_validate_sms/'
            header_send_sms = {
                "Accept": "application/json, text/javascript, */*; q=0.01",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN,zh;q=0.9",
                "Content-Length": "32",
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "Host": "www.y***k.net",
                "Origin": "http://www.y***k.net",
                "Proxy-Connection": "keep-alive",
                "Referer": "http://www.y***k.net/wh/web/mreg.html",
                "User-Agent": self.agent,
                "X-Requested-With": "XMLHttpRequest",
            }
            data_send_sms = {
                'phone': self.tele_num,
                'name': self.nickname,
            }
            proxy_send_sms = {
                'http': self.proxy
            }
            send_sms_req = requests.post(send_sms_url, headers=header_send_sms, data=data_send_sms, proxies=proxy_send_sms)
            v_code = json.loads(send_sms_req.content)['v_code']
            return v_code
    
        def get_proxy(self):
            return requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')
    
        def edit_info(self):
            print('\r正在浏览器编辑中......', end='')
            # 输入昵称、手机号、密码、确认密码,等待10秒后,输入验证码
            nickname_input = self.chrome.find_element_by_id("doc-ipt-1")
            nickname_input.send_keys(self.nickname)
            phone_input = self.chrome.find_element_by_id("doc-ipt-2")
            phone_input.send_keys(self.tele_num)
            psd_input = self.chrome.find_element_by_id("doc-ipt-3")
            psd_input.send_keys(self.tele_num)
            psd_again_input = self.chrome.find_element_by_id("doc-ipt-4")
            psd_again_input.send_keys(self.tele_num)
            time.sleep(10)
            # 输入验证码
            print('\r发送验证码中......', end='')
            verification_input = self.chrome.find_element_by_id("doc-ipt-5")
            verification_input.send_keys(self.send_sms())
    
        def run(self):
            self.edit_info()
    
            # 随机等待15-50秒后,提交信息
            time.sleep(random.randint(15, 50))
            btn = self.chrome.find_element_by_id('confirm_btn')
            btn.click()
    
            # 执行js,获取token值
            js = 'document.getElementById("doc-ipt-1").className = get_user_token()'
            count = 0
            while self.token_ == 'null' or count > 10:
                count += 1
                print('\r“token_” key is :', self.token_, end='')
                time.sleep(1)
                self.chrome.execute_script(js)
                self.token_ = self.chrome.find_element_by_id("doc-ipt-1").get_attribute('class')
            print('\r{}   {}    {}'.format(self.proxy, self.tele_num, self.token_))
            self.info_list.extend([self.proxy, self.tele_num, self.token_])
            return self.info_list
    

    3,​代理ip写入,检查是否为高匿、是否可访问

    # 检查url是否可以通过代理ip访问
    class check_url(object):
        """
            检查url是否可以通过代理ip访问
                case:
                    check = check_url('http://httpbin.org/ip')
                    while not check.check_ip():
                        http_str = check.refresh()
                        if check.proxies['http'] == http_str:
                            break
                        check.proxies['http'] = http_str
        """
    
        def __init__(self, url, ip_proxy=None):
            self.url = url
            if ip_proxy:
                self.proxies = {
                    'http': ip_proxy}
            else:
                self.proxies = {
                    'http':  requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')}
    
        def check_ip(self):
            # 能访问返回True
            try:
                # 超过20秒的代理就不要了
                r = requests.get(self.url, proxies=self.proxies, timeout=10, verify=False)
                if r.status_code == 200:
                    # print(r.content)
                    print('{}可以正常访问'.format(self.proxies['http']))
                    return True
            except Exception as e:
                print('\r{}---->{}---更换ip中'.format(self.proxies['http'], e), end='')
                time.sleep(0.1)
    
        def refresh(self):
            return requests.get("http://192.168.1.7:5010/get/").content.decode('utf-8')
    
    
    
    # 从站大爷ip网站中取最新ip,写入文件
    def write_zdy_ip():
        # 写入文件位置为:E:\ip3.txt
        def now_time(time_str="%Y-%m-%d-%H-", replace=['年', '月', '日', '时'], replace_str='-'):
            time_stamp = time.localtime(time.time())
            str_now_time = str(time_stamp.tm_year) + replace_str + str(time_stamp.tm_mon) + replace_str + \
                           str(time_stamp.tm_mday) + replace_str + str(time_stamp.tm_hour) + replace_str
            # str_now_time = time.strftime(time_str, time_stamp)  # 含0
            show_now_time = str_now_time
            for item in replace:
                # 将 中文 转化成 unicode
                show_now_time = show_now_time.replace(replace_str, item, 1)
                item = item.encode('unicode_escape').decode()
                str_now_time = str_now_time.replace(replace_str, item, 1)
            print('当前时间:', show_now_time)
            return str_now_time
        zdy_url = 'http://ip.zdaye.com/dayProxy.html'
        headers = {
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
            "Cookie": "acw_tc=781bad0815554276156886732e5dc4c8fa7bc5f5f7d49920ab817374586a8b; ASPSESSIONIDQSCADTTD=CPLINKOCBKENHNPBEHDCMAKJ; __51cke__=; Hm_lvt_8fd158bb3e69c43ab5dd05882cf0b234=1555427618; ASPSESSIONIDACRDDQQA=GMPHOIPCLFKBFGCPFMBDFAPM; __tins__16949115=%7B%22sid%22%3A%201555427617018%2C%20%22vd%22%3A%204%2C%20%22expires%22%3A%201555429600579%7D; __51laig__=4; Hm_lpvt_8fd158bb3e69c43ab5dd05882cf0b234=1555427801",
            "Host": "ip.zdaye.com",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
        }
        referer = {'Referer': 'http://ip.zdaye.com/dayProxy.html'}
        res = requests.get(zdy_url, headers=headers)
        if res.status_code == 200:
            soup = BeautifulSoup(res.content, "html.parser")
            panel = soup.find('div', class_='panel-body')
            panel = str(panel)
            time_str = now_time()
            pattern = r'.+href="(.+)">{}.+'.format(time_str)
            pattern_ = r'.+href="(.+)">{}.+'.format('2019\u5e74')
            if len(re.findall(pattern, panel)) < 1:
                href_day = re.findall(pattern_, panel)[0]
                url_day = 'http://ip.zdaye.com' + re.findall(pattern_, panel)[0]
            else:
                href_day = re.findall(pattern, panel)[0]
                url_day = 'http://ip.zdaye.com' + re.findall(pattern, panel)[0]
    
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')
        options.add_argument("disable-infobars")
        chrome_day = webdriver.Chrome(chrome_options=options)
        chrome_day.get(zdy_url)
        hre = chrome_day.find_elements_by_css_selector('a[href="{}"]'.format(href_day))[0]
        hre.click()
        chrome_day.refresh()
        text = chrome_day.find_elements_by_css_selector('.cont')[0].text
        with open('E:\ip3.txt', 'w', encoding='utf-8') as f:
            f.write(text)
        print('ip已写入...', end='')
    
        # 从站大爷将ip放置txt文件(E:\ip3.txt)中,开始执行
        ip_proxy = []
        userful_ip = []
        with open('E:\ip3.txt', 'r', encoding='utf-8') as f:
            for item in f:
                ip = item.split('@')[0]
                type = re.findall(r'.+\[(.+)\].+', item)[0]
                if type == '高匿':
                    ip_proxy.append(ip)
        print('共{}个高匿ip,现在开始检查可用性...'.format(len(ip_proxy)))
        # 检查高匿ip是否可以访问目标网站
        for i in range(len(ip_proxy)):
            check = check_url('http://www.y***k.net', ip_proxy[i])
            if not check.check_ip():
                print('{}不可用'.format(ip_proxy[i]))
            else:
                userful_ip.append(ip_proxy[i])
        print('共{}个可用ip,可用ip集合:'.format(len(userful_ip)), userful_ip)
        return userful_ip

    4,​主函数

    # 批量 新建账号
    def new_start(userful_ip):
            for i in range(len(userful_ip)):
                try:
                    print('第{}次开始运行...'.format(i + 1))
                    info_list = register_user(proxy=userful_ip[i]).run()
                    info_str = info_list[0] + '|' + info_list[1] + '|' + info_list[2] + '\n'
                    with open(r"E:\users.txt", 'a') as f:
                        f.write(info_str)
                    print('已成功写入第{}个用户,响应等待中...'.format(i + 1))
                    time.sleep(random.randint(30, 600))
                except Exception as e:
                    print('Error:', e)
    
    
    # 批量  投票
    def wechat_start():
        info_ip, token, ip_token = [], [], []
        # with open(r'E:\users.txt', 'r') as f:
        with open(r'E:\users_repeat2.txt', 'r') as f:
            for item in f:
                item_list = item.split('|')
                info_ip.append(item_list)
    
        for info in info_ip:
            if info[0] not in ip_token:
                ip_token.append(info[0])
                token.append(info[2].strip())
            # else:
            #     info__str = info[0] + '|' + info[1] + '|' + info[2]
            #     with open(r"E:\users_repeat2.txt", 'a') as f:
            #         f.write(info__str)
        print('可用用户:', len(ip_token))
        # time.sleep(100)
        # 10个用户一组进行投票,每个人间隔3~6分钟,每组间隔15~30分钟
        # 创建一个10的列表
        down = [i * 10 for i in range(1, 20)]
        # 将所有用户投票
        for i in range(len(token)):
            if i+1 < 1:
                continue
    
            for itemm in down:
                if i == itemm:
                    time.sleep(random.randint(60 * 15, 60 * 30))
    
            print('正在使用第%s个用户投票' % str(i+1))
            wechat_yhl = vote_wechat(token=token[i], proxy={'http': ip_token[i]})
            wechat_yhl.run()
            time.sleep(random.randint(60 * 3, 60 * 6))
    
    
        # 0.获得最新ip
        userful_ip = write_zdy_ip()
    
        # 1. 注册
        new_start(userful_ip)
    
        # 2. 遍历 账号文件夹去投票
        wechat_start()
    
        while True:
            # 无限注册账号
            try:
                new_start(write_zdy_ip())
                time.sleep(60 * 90)
            except Exception:
                print('遇到问题,重试中...')
                time.sleep(10)

     

    展开全文
  • 原标题:微信公众号到底应该几点推文?微信公众号到底应该几点推文?早晨上班,中午休息,晚上睡觉前,都是好时间。这些时间别说刚入行的小白知道,就连半只脚没踏进运营门槛的小灰都知道,再遵循这个规律发文还有...

    原标题:微信公众号到底应该几点推文?

    微信公众号到底应该几点推文?

    早晨上班,中午休息,晚上睡觉前,都是好时间。

    这些时间别说刚入行的小白知道,就连半只脚没踏进运营门槛的小灰都知道,再遵循这个规律发文还有意义吗?

    虽然在几个固定的阅读高峰期推文最好,但你有思考过这个“固定的高峰期”是否符合你公众号用户的阅读习惯?

    8d560412b0b6c8b096c14f3dc727b3cd.png

    毒鸡汤早晨发,让用户一天毒气满满?

    资讯新闻晚上发,让用户阅读最后一手信息?

    现在普遍的状况是:各家公众号每天都按部就班地推送微信,但具体为什么,好像并不清楚。今天达妹就跟大家一起讨论下,微信到底应该几点推送。

    鸡 汤 类

    鸡汤类公众号早已不是单纯的鸡汤了。阳光励志、扯皮撕逼,各种鸡汤各种有。因此,我们针对不同鸡汤要划分出不同的推送时间段。

    6ecfd5cd39aa604b7685c9c88bd27241.png

    比如,积极向上的鼓舞士气鸡汤需要早上推送,让大家一睁眼就能看到“梦想的号角”。而扯皮撕逼类鸡汤要在晚上睡觉前推送,毕竟这类故事性、逻辑性强的东西需要大家花费点脑子去琢磨的东西,在睡觉前阅读再合适不过了

    说了那么多,其实重点就是,累了一天看到别人过得也很不开心,哈哈哈哈哈就……放心了。

    媒 体 类

    媒体类公众号最重要的特点就是“及时”。虽然很多媒体类的公众号可以一天多次推送,但也要把握好自己的节奏,不能盲目追求信息及时而打乱推送节奏。另外,一天只有一次推送机会的订阅号更应该慎重对待推送时间,否则用户会一脸懵逼。

    不仅懵逼,还容易出车祸呦,都记得奥斯卡颁奖礼的大乌龙吧?

    5e869429b7ba578ad0633e59c8642328.png

    通常来说,这类公众号适合在早上8点、下午17点推送,大家上班前、下班后都会利用路上的时间刷一刷新闻。这就是这类用户的习惯。

    当然,如果某天突然爆发了惊天大新闻,而你又幸运地掌握了第一手资料,那就赶紧让自己的手速飞起来,凌晨也要推送啊!!!

    企 业 类

    企业类公众号推送消息,最讲究的就是“碎片化时间”。比如员工中午的午休时间12点—1点,掏出手机翻一翻,恰好就能看到你推送的消息。中午推送的好处还有一个就是:可以利用晚上的碎片化时间再传播一轮。这对于企业类账号就非常合适。

    购物类

    这类公众号如果不知道应该几点推送,可以找身边的妹子问一问,就会发现:一天里买买买的时间基本都在晚上睡觉前,毕竟没有什么事比躺在床上买买买更爽的。

    8159433924972aa70a468bb9175f9054.png

    其实,不管哪一类公众号,都要在掌握用户习惯的基础上,潜移默化地影响用户的阅读习惯。你可以根据自己的分析选择不同时间段推送一周尝试,通过对比后台数据,大致能掌握到一些信息,再选择出合适的时间点。

    最后,送大家一张用户在各时间段的行为习惯,大家可以参考选择,去尝试推送。

    8d94b7510bed40553924e2578324728f.png

    文章转载自:运营拍档 ID:dryypd 转载请联系作者。

    免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

    责任编辑:

    展开全文
  • 这两天微信公众号刷点击阅读量的工具崩溃了的消息漫天遍布,原来是腾讯在9月27号晚上将接口key改为了“cookie”,公号刷量工具就能通过post的方式进行模拟阅读。这意味着什么呢?意味着我们平时所看到的“点击率...

      这两天微信公众号刷点击阅读量的工具崩溃了的消息漫天遍布,原来是腾讯在9月27号晚上将接口key改为了“cookie”,公号刷量工具就不能通过post的方式进行模拟阅读。这意味着什么呢?意味着我们平时所看到的“点击率超高大号”,就要“被迫裸奔”露出“本来面目”了。

      为此,不少运营者还特意查看了,9月27和28这两天的阅读数据,将之前觉得有嫌疑的营销号、情感号和娱乐号,从新查看了一遍,发现平时阅读达好几万的,今天就变成了几千、几百,甚至一些10W+的文章,一下子也缩水到四五千,差距如此之大,不由得令人瞠目结舌,刷粉刷量的虚假行为,已经严重干扰到自媒体的正常运行的公平性。

      为了严厉打击“微信刷阅读行为“,腾讯科技以某个公众号为例,截出了9月28日至29的仅为600多的阅读数据,而该号26日至27日的文章阅读量却高达2W+,真相往往是残酷的,但微信团队向腾讯科技独家表示一贯坚决打击任何虚假、欺骗用户、影响体验的行为。

      如果,腾讯科技这次真的下定决心,要清理“微信刷阅读行为”,净化公众号发展空间,那么那些希望能找到精准粉丝的广告主,就能放心的投微信广告,不至于再担心自己上当受骗,而对其它的一些公众号而言,自己也能在干净的网络氛围里继续运营。



    在自媒体行业内,刷粉刷量已经是公开的事实了,不少公众号运营者为了谋求爆利,往往会选选择刷粉刷数据,靠这条捷径赚钱,时至今日,刷微信数据已经发展成一个庞大的地下产业链,做自媒体这个行业的人都知道这个行业的存在,可为何这次“刷量”,却遭到了微信官方的“迎头痛击”呢?

    根据targetsocial 仟传网络的创始人苏旋的说法,这次腾讯科技之所以出手,清除“微信刷阅读”行为,根本原因就在于,腾讯改变了原来的接口,之前的接口是key,key的主要作用就是采集个人微信信息和公号信息,只要刷量就能通过post的方式进行模拟阅读。

    但在9月27号晚上腾讯将接口改为了“cookie”,原本的程序发生变化,之前的“模拟阅读”也就无计可及,半小时过后,原本被刷过的文章阅读量数据统统被“打回原形”露出了“狐狸尾巴”了。


    (腾讯科技统计的一些微信大号的状况对比数据)

    现在只要你在淘宝上随意搜索,打上”微信公众号吸粉“这几个字,这时你就会发现,从事刷数据的商家不在少数,一些商家的成交量甚至高达五六万,只要你肯给钱,就能快速提升你的文章阅读量;

    按媒体曝光的刷阅读量价格来计算,图文阅读量15元1000次,原文阅读量是15元100次,转发分享量40元100次,微信粉丝最顶级质量20元500粉。

    如果你是图文类公众号运营者,想要公众号的阅读量达到8万那么就要支付1200块,想要10万+的文章就要支付1500块,这样算来我们所看到的,觉得内容不咋地的高阅读文章,十之八九有可能是刷出来的。



    那么,刷阅读这个行业是如何运营的呢?根据拉勾网前CTO许光运的说法,微信刷量的方法,主要分为两种,第一种是人工刷,简单来说,就是找自己的“线人”去刷,然后再按具体的数量分提成,手法与App Store刷榜相类似;第二种就是动用技术刷,想要多少阅读就刷多少量。

    如果是第一种刷量方式,营销公司就会设置多个订阅号大群,并以发布任务的形式扩群获取点击量,但人工刷的成本高效率低,所以,刷阅读逐渐变成了一门“技术活”由机器操作;这种机器除了能刷阅读之外,还能对公众号进行点赞、刷粉丝等各种操作。另外还有最重要的一点就是,它可以避免平台的监测和用户的举报,保障其“安全性”。

    就目前来说,微信就曾对刷阅读量这类行为表过态:对于刷阅读量这种行为,微信团队早已制定严格的防范措施和处罚机制,一经查实,将严格惩罚,不排除微信采取封号的措施。

    下面我们来看下,微信这么一打击,看看一些大佬是怎么回应的:





    可是,微信公众号的“黑水”那么多,谁又能保证,不会再出现“上有政策,下有对策”的局面呢?

    原文在这

    展开全文
  • 钉钉关联微信公众号刷步数思路

    千次阅读 2016-06-17 17:29:38
    配置验证 ... 获取消息内容,发送者,消息类型,公众号 添加日志记录 查找用户信息 是否绑定悦动id 未绑定 提示绑定↑ 已绑定 ↓ 判断消息内容 003 获取用户信息 取消 取消绑定 数字(1-9999)
  • 关于微信助力之微信怎么砍价及微信公众号文章评论点赞怎么赞方法,越来越多的人在平常生活中使用微信,以微信为载体的许多功能就被开发和使用了起来,比如——微信投票。于是乎,微信上兴起了各种投票,从...
  • 微信公众号

    2018-06-05 10:19:40
    1、微信公众号开发之现金红包:https://www.jianshu.com/p/c06120bc1f5c2、微信公众号开发之模板消息:https://www.jianshu.com/p/eb0e9c4dcdfe3、微信公众号开发之刷卡支付:...https://www.jianshu.com/p/...
  • 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 备注:当前每个账号的...
  • 有了微信公众号后,就要对微信公众号进行运营,微信运营的方式就是推广文章,好的微信文章是最好的吸粉手段,那微信公众号文章怎么使用代码排版?我们一起来看看下文的例子吧。欢迎大家来阅读。需求简单介绍下西窗烛 ...
  • 一、公众号裂变 目前,公众号具有较高的准确性和相对快速的增加粉丝的方法。操作过程如下:1,设定奖品诱饵的时候要明确自己的目标粉丝群体...微信官方建立了原创声明保护功能,以有效保护原创作者的权利,提高原创内容
  • 行业分类-物理装置-一种微信公众号是否阅读的判断方法及装置.zip
  • 有了微信公众号后,就要对微信公众号进行运营,微信运营的方式就是推广文章,好的微信文章是最好的吸粉手段,那微信公众号文章怎么使用代码排版?我们一起来看看下文的例子吧。欢迎大家来阅读。需求简单介绍下西窗烛 ...
  • 前一阵闹得沸沸扬扬的微信自媒体公号“数据造假”事件,在自媒体、公关和广告主的行业中引发了小的风泼。到底网上的广告数据还有没有真的?是不是大公司的数据就可靠些? 未必。 在微信自媒体“数据造假”事件发生...
  • 微信公众号开发技术要点

    万次阅读 多人点赞 2018-07-29 08:22:11
    微信公众号开发技术要点 微信公众号开发技术要点 微信公众号及其接口功能介绍 基本概念 公众号开发者模式 代码验证及图示 Open ID与Union ID 基本概念 使用说明 Access_token 基本介绍 注意事项 获取流程 ...
  • 1、微信公众号开发之现金红包:https://www.jianshu.com/p/c06120bc1f5c 2、微信公众号开发之模板消息:https://www.jianshu.com/p/eb0e9c4dcdfe 3、微信公众号开发之刷卡支付:...
  • 微信公众号之刷卡支付

    千次阅读 2016-10-21 17:19:39
    此篇文章具体来聊聊微信刷卡支付 刷卡支付-官方文档 场景介绍 步骤1:用户选择刷卡支付付款并打开微信,进入“我”->“钱包”->“刷卡”条码界面步骤2:收银员在商户系统操作生成支付订单,用户确认...
  • 微信公众号评论赞的探索

    万次阅读 多人点赞 2018-01-01 18:53:11
    微信刷阅读量
  • 微信公众号留言点赞及微信留言点赞怎么以及微信赞方法,越来越多的人在平常生活中使用微信,以微信为载体的许多功能就被开发和使用了起来,比如——微信投票。于是乎,微信上兴起了各种投票,从小学生到gov部门...
  • 教一个关于微信公众号投票怎么刷票之微信怎样快速刷票及怎么微信票数办法 你还在傻傻的选用传统的微信拉票来为自己所参与的微信投票评选活动进行拉票吗?你是不是觉得这样的微信拉票显的十分苍白无力?是不是...
  • 微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。...内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131
  • 点击上方蓝色“方志朋”,选择“设为星标” 回复“666”获取独家整理的学习资料! 在讲微信公众号开发之前,先来大概了解一下微信公众号微信公众号大体上可以分为服务号和订阅号,订阅号和服...
  • 微信公众号支付是基于微信公众号而开发的支付接口,在已有的公众号里可以添加 ASP 的公众号支付,微信中生成订单后,直接调出微信钱包支付,非常方便,同样支持自动更新订单状态。 H5 支付是手机浏览器使用的接口,...
  • 了解清楚微信公众号阅读量提升,微信公众号粉丝,到底是一种怎么样的存在,是解决一切问题的关键。 可是,即使是这样,微信公众号阅读量提升,微信公众号粉丝,的出现仍然代表了一定的意义。 我认为, 从这个角度来...
  • 下面先贴下微信内网页支付的流程图:微信公众号支付流程图咱们后台要做的,实际下是有以下几个方面:1. 商户订单的生成2. 调用微信的统一下单接口,微信那边生成预支付订单,并返回预支付订单ID即prepay_id,具体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,670
精华内容 6,268
关键字:

微信公众号刷不出来