chaoxiang.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import os, sys,time,datetime
  4. import urllib
  5. import requests
  6. from mongoengine import register_connection, PointField, DynamicDocument, StringField,Document
  7. import simplejson as json
  8. import simplejson as json
  9. import base64
  10. import sys
  11. import json
  12. import base64
  13. import urllib2
  14. from urllib import quote_plus
  15. from urllib2 import urlopen
  16. from urllib2 import Request
  17. from urllib2 import URLError
  18. from urllib import urlencode
  19. # from django.db.models.fields import DateTimeField
  20. #
  21. #
  22. # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "configs.testing")
  23. #
  24. # from script.base import init_env
  25. #
  26. # init_env(interactive = False)
  27. import pyautogui
  28. import qrcode
  29. IS_PY3 = sys.version_info.major == 3
  30. if IS_PY3:
  31. from urllib.request import urlopen
  32. from urllib.request import Request
  33. from urllib.error import URLError
  34. from urllib.parse import urlencode
  35. from urllib.parse import quote_plus
  36. else:
  37. import urllib2
  38. from urllib import quote_plus
  39. from urllib2 import urlopen
  40. from urllib2 import Request
  41. from urllib2 import URLError
  42. from urllib import urlencode
  43. # 防止https证书校验不正确
  44. import ssl
  45. import pytesseract
  46. from PIL import Image
  47. # 超翔的需要利用android手机,打开小程序,然后拿到数据。我直接用的影刀连接android手机(必须调试模式,运行模拟点击的调试模式),然后再通过PC自动化进行操作
  48. ssl._create_default_https_context = ssl._create_unverified_context
  49. # 利用百度APP,直接解析截图中的地址,以及端口编号。
  50. API_KEY = 'OVcN78LP40CBEwWk5REF2Hyu'
  51. SECRET_KEY = 'a7luZBdbzjsfU9oE2GD3yPeTBgPty03t'
  52. OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
  53. TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
  54. register_connection(alias = 'spider',
  55. name = 'spider',
  56. host = '211.159.224.10',
  57. port = 27119,
  58. username = 'service',
  59. password = 'oOzjoQcO5DyyiN97AY0NpzJ6vztjNpx5',
  60. authentication_source = 'admin')
  61. class chaoxiang(Document):
  62. devNo = StringField(default = '')
  63. phone = StringField(default = '')
  64. meta = {
  65. 'collection': 'chaoxiang',
  66. 'db_alias': 'spider',
  67. 'unique_together': {'devNo'}
  68. }
  69. def fetch_token():
  70. params = {'grant_type': 'client_credentials',
  71. 'client_id': API_KEY,
  72. 'client_secret': SECRET_KEY}
  73. post_data = urlencode(params)
  74. if (IS_PY3):
  75. post_data = post_data.encode('utf-8')
  76. req = Request(TOKEN_URL, post_data)
  77. try:
  78. f = urlopen(req, timeout=5)
  79. result_str = f.read()
  80. except URLError as err:
  81. print(err)
  82. if (IS_PY3):
  83. result_str = result_str.decode()
  84. result = json.loads(result_str)
  85. if ('access_token' in result.keys() and 'scope' in result.keys()):
  86. if not 'brain_all_scope' in result['scope'].split(' '):
  87. print ('please ensure has check the ability')
  88. exit()
  89. return result['access_token']
  90. else:
  91. print ('please overwrite the correct API_KEY and SECRET_KEY')
  92. exit()
  93. request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic" # accurate_basic
  94. def read_file(image_path):
  95. f = None
  96. try:
  97. f = open(image_path, 'rb')
  98. return f.read()
  99. except:
  100. print('read image file fail')
  101. return None
  102. finally:
  103. if f:
  104. f.close()
  105. def request(url, data):
  106. req = Request(url, data.encode('utf-8'))
  107. has_error = False
  108. try:
  109. f = urlopen(req)
  110. result_str = f.read()
  111. if (IS_PY3):
  112. result_str = result_str.decode()
  113. return result_str
  114. except URLError as err:
  115. print(err)
  116. # 二进制方式打开图片文件
  117. # 获取access token
  118. token = fetch_token()
  119. # 拼接通用文字识别高精度url
  120. #
  121. def get_zone_text(region):
  122. file1 = pyautogui.screenshot(region=region)
  123. picPath = u'Q:/temp_chaoxiang/' + '%s.jpg' % int(time.time()*1000)
  124. file1.save(picPath)
  125. string = pytesseract.image_to_string(Image.open(picPath), lang='chi_sim')
  126. return string.replace(' ','')
  127. def back_to_search():
  128. string = get_zone_text(region=(782,183,228,27))
  129. if u'启动设备' in string:
  130. pyautogui.click(x=1265, y=436)
  131. time.sleep(1)
  132. elif u'搜索' in string:
  133. return True
  134. elif u'通话' in string:
  135. pyautogui.click(x=1265, y=436)
  136. time.sleep(1)
  137. pyautogui.click(x=1265, y=436)
  138. time.sleep(1)
  139. elif u'首页' in string:
  140. pyautogui.click(x=1090, y=241)
  141. time.sleep(1)
  142. string = get_zone_text(region=(782,183,228,27))
  143. if u'搜索' in string:
  144. return True
  145. else:
  146. return False
  147. def get_text_from_baidu(region):
  148. try:
  149. file1 = pyautogui.screenshot(region=region)
  150. picPath = u'Q:/temp_chaoxiang/' + '%s.jpg' % int(time.time()*1000)
  151. file1.save(picPath)
  152. f = open(picPath, 'rb')
  153. img = base64.b64encode(f.read())
  154. if f:
  155. f.close()
  156. # 调用文字识别服务
  157. params = {"image":img}
  158. request_url1 = request_url + "?access_token=" + token
  159. headers = {'content-type': 'application/x-www-form-urlencoded'}
  160. response = requests.post(request_url1, data=params, headers=headers)
  161. # 解析返回结果
  162. result_json = response.json()
  163. for words_result in result_json["words_result"]:
  164. text = words_result["words"]
  165. return text
  166. return ''
  167. except Exception,e:
  168. print u"解析图片报错了!!!!",e
  169. #
  170. # string = get_text_from_baidu(None)
  171. for ii in range(0,259889):
  172. jj = 259889 - ii
  173. if jj < 100000:
  174. break
  175. print jj
  176. shouji = pyautogui.getWindowsWithTitle(u'手机管理器')[0]
  177. if not shouji:
  178. break
  179. shouji.activate()
  180. time.sleep(3)
  181. if not back_to_search():
  182. print u'无法定位到搜索界面'
  183. break
  184. # 点击搜索框
  185. pyautogui.doubleClick(x=1066, y=249,interval=0.1)
  186. time.sleep(1)
  187. # 点击删除按钮,把可能的多余的删除掉
  188. pyautogui.click(x=1172, y=806,clicks=10,interval=0.1)
  189. time.sleep(0.1)
  190. # 输入设备ID号
  191. pyautogui.write("%s" % jj)
  192. time.sleep(0.1)
  193. # 点击搜索
  194. pyautogui.click(x=1170, y=868)
  195. time.sleep(1)
  196. # 检查是否有搜索结果
  197. string = get_zone_text(region=(828,316,332,100))
  198. print string
  199. if u'无' in string:
  200. print u'没有找到此设备',jj
  201. continue
  202. # 点击设备,多等下,因为广告比较慢
  203. pyautogui.click(x=1069, y=343)
  204. time.sleep(5)
  205. # 点击可能打开的广告,没有广告,多点击一次也无所谓
  206. pyautogui.click(x=1003,y=197)
  207. time.sleep(0.5)
  208. # 检查是否有联系商户,没有直接返回
  209. string = get_text_from_baidu(region=(1138,765,61,32))
  210. if not u'联系' in string:
  211. print u'没有找到联系方式按钮'
  212. result = back_to_search()
  213. if result:
  214. continue
  215. else:
  216. print u',请人工干预'
  217. break
  218. # 点击联系方式
  219. pyautogui.click(x=1167,y=775)
  220. time.sleep(1)
  221. #解析电话
  222. string = get_zone_text(region=(813,431,331,46))
  223. try:
  224. newObj = chaoxiang(str(jj),string)
  225. newObj.save()
  226. print u'搞到一条信息!!!',string
  227. except Exception,e:
  228. continue
  229. result = back_to_search()
  230. if result:
  231. continue
  232. else:
  233. print u'无法返回到搜索页面,请人工干预'
  234. break
  235. # time.sleep(0.1)
  236. #
  237. #
  238. # while True:
  239. # a= auto.GetFocusedControl()
  240. # time.sleep(2)
  241. # print a
  242. # print a.Name
  243. # time.sleep(2)
  244. # while True:
  245. # pyautogui.moveTo(987,574)
  246. # file1 = pyautogui.screenshot(region=(766,220,412,575))
  247. # file1.save(u'Q:/友商信息/汽车桩/星星充电/站列表截图/%s.png' % int(time.time()*1000))
  248. # ii += 1
  249. # print ii
  250. # pyautogui.scroll(-400)
  251. # time.sleep(0.2)
  252. print 'OK'