前程无忧岗位推送


import random
import re
import smtplib
import threading
import time
from email.mime.text import MIMETextimport redis
import requests
import pymysql as MySQLdb
from lxml import etreeproxy_api = 'http://http.tiqu.alibabaapi.com/getip?num=1&type=2&neek=563834&port=11&lb=1&pb=4&regions='
golols = {"dl": {'https': '16150'},"headers": {}
}def get_hexxor(s1, _0x4e08d8):_0x5a5d3b = ''for i in range(len(s1)):if i % 2 != 0: continue_0x401af1 = int(s1[i: i + 2], 16)_0x105f59 = int(_0x4e08d8[i: i + 2], 16)_0x189e2c_10 = (_0x401af1 ^ _0x105f59)_0x189e2c = hex(_0x189e2c_10)[2:]if len(_0x189e2c) == 1:_0x189e2c = '0' + _0x189e2c_0x5a5d3b += _0x189e2creturn _0x5a5d3bdef get_unsbox(arg1):_0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19,0xd,0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c,0x22, 0x25, 0xc, 0x24]_0x4da0dc = []_0x12605e = ''for i in _0x4b082b:_0x4da0dc.append(arg1[i - 1])_0x12605e = "".join(_0x4da0dc)return _0x12605edef setheaders():headers = {'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Host': 'jobs.51job.com','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',}while True:try:r = requests.get('https://jobs.51job.com/beijing-dxq/134663856.html', headers=headers, proxies=golols["dl"], timeout=(3, 5), verify=False)arg1s = re.findall("arg1=\'(.*?)\'", r.text)if len(arg1s) == 0:print(f"无法获取setcookie {arg1s} 尝试切换代理!")setproxy()time.sleep(4)continuebreakexcept  Exception as e:print(f"网络异常:{e}")setproxy()s1 = get_unsbox(arg1s[0])_0x4e08d8 = "3000176000856006061501533003690027800375"_0x12605e = get_hexxor(s1, _0x4e08d8)print(f"更新_0x12605e: {_0x12605e}")headers = {# 'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36','X-Requested-With': 'XMLHttpRequest',"cookie": "acw_sc__v2=%s" % _0x12605e,}golols["headers"] = headersdef get_page_searchdata(url):print(f">>> 正在访问:{url}")golols["headers"]["Accept"] = 'application/json, text/javascript, */*; q=0.01'while True:try:ssr = requests.get(url, headers=golols["headers"],proxies=golols["dl"], verify=False,timeout=(3, 3))if 'setCookie("acw_sc__v2", x)' in ssr.text:print(f">>> cookie失效")setheaders()continueif '<title>滑动验证页面</title>' in ssr.text:print(f'>>> ip失效')setproxy()setheaders()continuereturn ssr.json()except  Exception as e:print(f"网络异常:{e}")setproxy()def search_keyword():url = f'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25A4%2596%25E8%25B4%25B8,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=1&dibiaoid=0&line=&welfare='page_source_data = get_page_searchdata(url)return page_source_datadef get_newjobs():rinset = redis.Redis(host="127.0.0.1", port=6379, db=9)if not rinset.exists('ids'):### 只搜索第一页数据orgdata = search_keyword()engine_jds = orgdata.get("engine_jds")for jd in engine_jds:rinset.sadd('ids', jd.get("jobid"))print(f">>> 初始化插入;{jd.get('jobid')}")return []else:origindata = search_keyword()### 然后在过滤操作 获取最新的数据 ,然后获取详情页推送消息listdata = origindata.get("engine_jds")ft = []for jb in listdata:if rinset.sismember('ids', jb.get("jobid")):jobid = jb.get("jobid")job_name = jb.get("job_name")company_name = jb.get("company_name")issuedate = jb.get("issuedate")text = f">>> 未发送变化 旧岗位:{jobid} {job_name} {company_name} {issuedate}"print(text)continueft.append(jb)rinset.sadd('ids', jb.get("jobid"))### 更新数据return ftdef dowork():print(f'\n正在执行任务:{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}')try:jobs_list = get_newjobs()for newjb in jobs_list:jobid = newjb.get("jobid")job_name = newjb.get("job_name")company_name = newjb.get("company_name")issuedate = newjb.get("issuedate")timesamp = time.mktime(time.strptime(issuedate,'%Y-%m-%d %H:%M:%S'))if time.time() - timesamp > 60*60:print(f">>> 时间差较大 取消发送 {jobid} {job_name} {company_name} {issuedate}")else:###pcompurl = newjb.get("company_href")jobcomaddreass = getaddress(compurl).strip().replace('公司地址:','')print("*" * 50)print("\n\n")print(">>>> 正在获取详情页:::")print(f">>> 正在推送 {jobcomaddreass}  {jobid} {job_name} {company_name} {issuedate}")aend_email(jobcomaddreass,jobid,job_name,company_name,issuedate)print("\n\n")print("*" * 50)except Exception as e:print(f">>> 执行异常:{e}")def aend_email(jobcomaddreass,jobid,job_name,company_name,issuedate):content = """工作地址:%s工作链接:%s工作名称:%s公司名称:%s发布时间:%s""" % (jobcomaddreass,f'https://jobs.51job.com/shanghai/{jobid}.html?s=sou_sou_soulb&t=0_0',job_name,company_name,issuedate)msg_from = '961948438@qq.com'  # 发送方邮箱passwd = 'ijomqjqxetxabcjf'  # 填入发送方邮箱的授权码msg_to = '961948438@qq.com'  # 收件人邮箱subject = "日志提醒"  # 主题msg = MIMEText(content)msg['Subject'] = subjectmsg['From'] = msg_frommsg['To'] = msg_totry:s = smtplib.SMTP_SSL("smtp.qq.com", 465)s.login(msg_from, passwd)result = s.sendmail(msg_from, msg_to, msg.as_string())print(f">>>> 推送结果: {result}")except Exception as e:print(f">>> 发送失败:{e}")def getaddress(company_href):while True:try:r = requests.get(company_href, headers=golols["headers"], proxies=golols["dl"], timeout=(3,5))if 'setCookie("acw_sc__v2", x)' in r.text:print(f">>> cookie失效")setheaders()if '<title>滑动验证页面</title>' in r.text:print(f'>>> ip失效')setproxy()setheaders()breakexcept  Exception as e:print(f"网络异常:{e}")setproxy()setheaders()time.sleep(2)etree_html = etree.HTML(r.content.decode('gbk',errors='ignore'))allps = ''.join(etree_html.xpath('.//p[@class="fp"]//text()'))return allps if '地址' in allps else '-'def init():res = requests.get('http://httpbin.org/get').json()ip = res.get("origin")base_api = f'https://ty-http-d.hamir.net/index/white/add?neek=tyhttp447242&appkey=7a708324dfca56cbaee3dcb908ca5198&white=' + ipres = requests.get(base_api).json()print(f'添加白名单状态:{res}')def setproxy():try:time.sleep(random.randint(1, 3))res = requests.get(proxy_api)ip = (res.json().get("data")[0].get("ip") + ":" + res.json().get("data")[0].get("port"))golols['dl']["https"] = "https://" + ipprint("https://" + ip)except Exception as e:print(e, "设置代理错误!")time.sleep(random.randint(1, 3))setproxy()if __name__ == "__main__":####创建时间调度器,每隔60分钟执行一次init()setproxy()setheaders()while True:th = threading.Thread(target=dowork)th.start()time.sleep(60)

前程无忧解密 + 推送相关推荐

  1. 企业微信H5_集成消息解密类,消息推送Get及Post回调处理

    文章目录 一. 验证URL有效性 1. 阅读文档 2. 文档分析 3. 加解密方案说明 4. 下载加解密算法 5. 案例分析 二.实战集成 2.1. 工具类拷贝 2.2. 依赖引入 2.3. 案例1集 ...

  2. taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,店铺订单明文接口,店铺订单解密接口,店铺订单消息推送接口

    taobao.trade.fullinfo.get( 获取单笔交易的详细信息 ),淘宝店铺卖出订单详情接口,对接该接口可用于获取淘宝店铺订单详情信息,包括卖出订单详情,买家姓名,买家电话,买家收货地址 ...

  3. 微信消息推送消息加解密(golang)

    本篇介绍如何使用golang对微信消息推送进行加解密,后续会补充,目前先写个原理,大概自己看一下,其他的自己应该也能写.老套路,分为三步,为啥写,教程,总结.懒得看的直接看第二步就行. 为什么突然写这 ...

  4. 淘宝开发平台店铺商品上传接口,店铺订单交易接口,店铺订单解密接口,店铺上下架接口,店铺订单推送接口(整理好的完整店铺上货订单操作接口)

    大家都知道,目前淘宝开放平台的店铺订单接口和店铺商品接口权限已经不支持申请应用,有好多做店群业务,店铺订单同步业务,店铺订单消息推送业务,店铺订单插旗业务,店铺上传商品业务,店铺修改商品属性业务,店铺 ...

  5. taobao.top.oaid.decrypt( OAID解密 )淘宝店铺订单明文接口,店铺订单解密,店铺订单消息推送,店铺订单物流接口代码对接教程

    taobao.top.oaid.decrypt( OAID解密 )淘宝店铺订单明文接口,店铺订单解密,店铺订单消息推送,店铺订单物流接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代 ...

  6. 有没有一种方法可以缓存GitHub凭证来推送提交?

    我最近切换到将存储库同步到GitHub上的https://(由于防火墙问题),并且每次都要求输入密码. 有没有一种方法可以缓存凭据,而不是每次git push都进行身份验证? #1楼 您还可以使用以下 ...

  7. (传送门)微信公众号推送文章(个人认为未来可能对我有用的部分)

    前言 很多时候偶然间在微信看到关注的技术性公众号推送的一些文章,但是往往一时没有闲暇去细细品读,所以还是储存下来,方便后面慢慢看吧. Content RxHttp:新一代Android网络请求神器,一 ...

  8. php微信小程序物流进度推送,微信小程序 消息推送php服务器验证实例详解

    微信小程序 消息推送php服务器验证实例详解 设置页面("设置">>"开发设置"): 1.设置服务器域名 注意http和https协议的不同. 2. ...

  9. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  10. 如何实现多路海康大华等RTSP数据转RTMP推送

    一个好的转发模块,首先要低延迟!其次足够稳定.灵活.有状态反馈机制.资源占用低,跨平台,最好以接口形式提供,便于第三方系统集成. 以Windows平台为例,我们的考虑的点如下 1. 拉流:通过RTSP ...

最新文章

  1. 七、 熵编码算法(1)——基础知识
  2. 开源IT从业者最受欢迎5大技能
  3. 【MM模块】ASAP 项目实施方法简介
  4. ps4连接r星服务器稳定,移植到不同平台的《GTA5》有什么变化?与八年前相比,差距这么大...
  5. php发送get、post请求的几种方法
  6. PPT将立方体形状变为很薄的长方体
  7. 【转】Pro Android学习笔记(八):了解Content Provider(下中)
  8. Atitit 文档资料的摘要与压缩技术总结abstract tech v4 目录 1. 概念包含了原文本中的重要信息,其长度不超过或远少于原文本的一半” 1 2. 1. 摘要的作用 应用场景 1 2
  9. oracle下载,linux版本的oracle数据库下载
  10. 云服务器远程桌面复制
  11. 计算机如何建立小型服务器,如何将个人PC搭建成小型服务器
  12. 做量化你需要知道的那些术语!(持续更新)
  13. 产品经理需要了解的宏观趋势(共享经济专题)1/7
  14. 设置jsp打开的默认方式
  15. 遍历当前目录删除指定的文件夹——批处理
  16. 20个最佳的flash游戏教程
  17. 【Vitis Accel】1 - HLS 简介
  18. 【Labview】对连续采集数据的一种采样方法
  19. 2021年焊工(技师)考试资料及焊工(技师)模拟试题
  20. JavaScript获取标签的几种方式

热门文章

  1. 4月27日—5月1日三年级课程
  2. select into from 和 insert into select 的用法和区别
  3. 关于芯片最高工作频率的计算
  4. kali制作钓鱼网站
  5. 各大主流编程语言比较,运用场景
  6. 《NAT穿越(NAT-T)RFC3947文档》记录
  7. 磁盘 RAID0 及其变种详解
  8. The following method did not exist:com.google.gson.GsonBuilder.setLenient()
  9. word添加脚注后正文跑到下一页
  10. Word打开目录导航、多页视图显示文章的方法