请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站English Version

AdvertCN - 广告中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
易赚网长期兑换paypal美元 值得信赖的顶级空间会员请立即修改密码ADPLEXITY + ADVERTCN
 诚聘FB投手(群814872384) 
全球COD物流 微信/电话13560706171BINOM TRACKER + ADRERTCN 60% OFF!欧美直客大刀Nutra广告位出租 
查看: 1170|回复: 7

模拟点击 验证码识别 全后台 youtube订阅

[复制链接]

6

主题

53

广告币

96

积分

初级会员

Rank: 2

积分
96
发表于 2018-8-28 13:34:29 | 显示全部楼层 |阅读模式
分享到:
mobipium
本帖最后由 xiaoxue 于 2019-3-4 20:50 编辑 ! S+ Q( [$ P) A; G

0 C5 [% j* S" b, n- @标题写的有点大, 东西还是有点的。 看代码把。。。算是上一个版本的扩展把。5 v# ^* C$ I. x0 p+ W: @) d
  1. 9 d: F1 b# o# O2 h
  2. # -*- coding: utf-8 -*-0 Z4 ]5 O( @; J& V9 w: Z' v: C% L
  3. - w3 g) H* D* {; \1 y% }, l, i
  4. from aip import AipOcr! D0 s( o0 _% V( \* R0 c+ L( S
  5. 7 h' C' o4 {" {3 j
  6. from selenium import webdriver
    1 W( a4 U: }% w/ y) s
  7. ! S0 t3 j+ i. ]
  8. import time
    - R- Y/ {1 Z! O  V# q- j
  9. 7 z& y5 v1 q- @, M+ r) m  M+ a, k
  10. import random8 _7 [& i' Q& q6 [1 E' {9 G
  11. $ h2 N8 }; q. m9 c
  12. import sys,re8 m" _1 e$ \; Z6 \% H- H7 k$ J

  13. 3 U4 L9 P$ m9 e3 P8 V/ D4 @
  14. from PIL import Image, ImageDraw,ImageFont5 r% t: O) \% T  H( h

  15. ! J+ a% D( b+ a" A* K
  16. """ 你的 APPID AK SK """4 o5 t+ v4 P5 H! ?) ~
  17. ( A* m. w! z4 i0 v+ S7 a
  18. APP_ID = 'xxx'! |6 I1 e/ g* G6 W

  19. # |9 l9 A4 ~3 m: K; M  i7 j
  20. API_KEY = 'xxx'
    ; e6 ^% b& w" y' j9 ?1 b
  21. 3 @; ?+ a4 g% D# X+ b+ w4 L
  22. SECRET_KEY = xxx'* q  T1 N$ x" I" d7 |# i
  23. $ J2 K  M3 K1 ]6 x$ W
  24. client = AipOcr(APP_ID, API_KEY, SECRET_KEY): c: k' D, ~2 ~0 T% D2 V* h

  25. : Z$ Z; j3 W% ~  T# e4 N
  26. #PROXY = "127.0.0.1:8118"
    ' `: }% A/ G' V  R4 [7 Z& M

  27. / c  ~8 Y# E& G" v) J& L' Q
  28. chrome_options = webdriver.ChromeOptions()! Y! G- t9 E! F. w& R, A

  29. 9 ^0 l4 u  V* q& [
  30. chrome_options.add_argument('--headless')
    3 q* A5 M  G6 p4 T$ C
  31. . m" B% c% k* X7 e: h, I
  32. chrome_options.add_argument('--disable-gpu')$ N& N; A: J" n3 r: I. J( _" U
  33. 1 [: k/ ?: S4 c3 j. Y. g# v7 ^( ^( a
  34. #chrome_options.add_argument('--proxy-server=%s' % PROXY); i% U3 E+ Y. n

  35. * ]# A- E6 D) _
  36. chrome_options.add_argument("--incognito")
    2 g- s1 ~/ x% J/ e. D) f& L/ z6 K
  37. + s. u2 g3 g* B
  38. chrome_options.add_argument('--ignore-certificate-errors')
    0 q* y, F' o9 |( f+ K
  39. ' Y% o/ p" {9 R# J, [0 P  K
  40. # Win. \$ K+ j8 F& q2 l& U2 g

  41. ; l$ R% Z# v8 A* [# `
  42. # chrome_options.add_argument("--log-level=3")& ~+ }+ `) y8 V1 x+ ?) Z6 Z5 A. x
  43. 3 l" {6 B* A& E' a
  44. # chrome_options.add_argument("--disable-logging")4 ], {' A/ {  G$ G4 M2 |, k

  45. 2 I; `. V  `. ]; N
  46. # chrome_options.add_argument("--disable-logging"). y; j' z& B/ u% P. v9 s
  47. ! x' e9 R8 N1 r( t+ C
  48. #chrome_options.add_argument('--no-sandbox')
    6 \& J/ n& H$ @+ T/ _* j

  49. . l; U0 W3 S4 I. s# g4 W0 d6 x  K* j
  50. """ 读取图片 """
    5 R. i- ^4 A3 B# ^) _( x

  51. 6 m' m4 p7 @4 G9 h( P$ m! S" {
  52. def get_file_content(filePath):
    3 t" y5 _7 Y. E$ Y
  53. " [# o8 V* u) C7 R# u8 q
  54. with open(filePath, 'rb') as fp:
      R) W- {1 c! c/ O

  55. 6 a& z6 C7 p' a7 v0 \* ~2 m: F. ]
  56. return fp.read()! a" H' z" F! e1 L
  57. " u5 R6 H! Y+ L* M/ K7 t
  58. driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)5 p% K, n! d. n/ C* {: W& j6 C- F
  59. ( h  N. |% S4 g: a( U1 A
  60. driver.set_window_size(1280, 727)- f( D' Y/ r: P3 v2 Z  O. x  {

  61. 6 u$ |/ B7 l, ^) U+ R; \" v7 d
  62. driver.get("https://youlikehits.com/")
    & E" p$ j( I2 ?- k" [

  63. & u* f: f& i- j/ ?( a. R
  64. time.sleep(5)
    % v# h( m, y1 j" @% q% V
  65. 0 S# a" y4 a1 ]8 g* W! c4 E  A- R* V
  66. driver.find_element_by_id("username").send_keys('11111') #user# v( d+ B! \9 o3 s0 @
  67. ; @1 y' n, m% a6 n- z* Y
  68. driver.find_element_by_id("password").send_keys('111111') #password3 V/ Z5 \( M3 |5 S' N& X$ R0 }' S

  69. ' ~4 d8 t) |- a, ~
  70. driver.find_element_by_xpath("//input[@value='Login']").click()
    ) |1 L+ T; w6 @3 \  {: o- f# M

  71. " q$ y+ V" ]0 z; B
  72. driver.get("https://youlikehits.com/youtubenew2.php")
    ' x$ O8 K+ H$ d' c1 I7 E7 C6 K
  73. ) W9 [8 U: Y& u( B
  74. time.sleep(1)
    3 L% e8 V( ]3 r9 U8 Q0 ~

  75. $ k: U+ o! ]* y9 [/ o# c8 [
  76. #Try Again4 t& z" R9 z; v
  77. 9 h8 S  O" n) ?4 y9 `
  78. def checkRefresh(driver):
    & {" v8 f. w8 d9 H

  79. 2 G7 F) Z$ c6 s% t, u+ A
  80.         try:
    6 t& q* }0 i) {4 T" ?
  81. + C* I" M8 U0 @  H% |: j! O5 p: L& Y
  82.                 Refresh = driver.find_element_by_id('loadmore')' g; r- [; O$ v( ]' W' N( d. G# k6 ?/ p

  83. 8 p3 ^4 k* Y* `" w
  84.                 Refresh.click()
    9 d* Q& o5 F* f
  85. 1 W! {5 ~' p5 ?! K& w5 X7 |' C+ Q
  86.                 driver.set_window_size(1280, 727)
    0 E6 j7 D8 F1 w' \, J+ d

  87. " Q& n" l  M& d% }; x
  88.         except Exception as e:8 n" s. \6 x1 Z0 f( h' f

  89. , W/ P& Y0 f/ J. ^9 ~) O
  90.                 pass
    % c$ Y  l# s" C/ b$ I

  91. # M8 ~, m, L$ c0 i4 ~; `
  92. def checkcaptcha(driver):
    9 _9 s9 U0 j+ l  ^1 }

  93. 0 H8 n5 F5 [1 q' K! L% {7 a
  94.         try:
    ! G0 z1 o6 S; P: r- }

  95. ! N0 a, m- f, j+ F, F& D( b
  96.                 captcha = driver.find_element_by_id('captcha')
    & j: W9 L6 w8 f1 s

  97. 0 y2 S# }$ d/ l. w4 k
  98.                 print driver.get_window_size()
    $ t# _* q4 \* l% Z& ~* `/ Y- ?: u

  99. ) M- O3 k8 K6 f
  100.                 time.sleep(2)9 `! u. c2 k" `, [2 ^

  101. $ a7 Y* u9 i8 i
  102.                 driver.save_screenshot('/tmp/screenshot.png')
    ' C* _: f' s( Z# e3 m

  103. 7 ~- Z8 D! v1 i
  104.                 im = Image.open('/tmp/screenshot.png')) `: W, O1 l7 q# q

  105. 4 n! D. [9 a! p  {$ f. ^% p1 m  i/ A
  106.                 #取消headless模式* _. v  Q* n' F/ q! N3 I5 Q

  107. 0 n) s8 _5 a& o5 K- I' J
  108.                 #a = im.resize((1269, 610),Image.ANTIALIAS)3 x5 c. j$ z% S; Q

  109. 0 |* W0 a& i* `0 a; L
  110.                
    , A& G5 r( B9 A
  111. 0 I0 p! O( s' o) |
  112.                 #开启headless模式  j; o7 I# g6 i6 M3 m
  113. 6 v& A, z6 D0 z7 X
  114.                 a = im.resize((1269, 727),Image.ANTIALIAS)
    % J, o( c! {+ V
  115. 1 a. R  H" H2 @) U; q8 y
  116.                 element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']"): K! _5 M. _6 \7 x  h

  117. ! c0 W, O1 x  ]+ [) [2 j
  118.                 left = element.location['x']
    6 k3 d1 [6 y) J8 [# D
  119. 9 d+ Q; V  a* P( r: I3 V4 F
  120.                 top = element.location['y']
    ' e' h. [, {: I

  121. ( Z4 D% w# H9 E% g& h
  122.                 right = element.location['x'] + element.size['width']8 g' n  |0 m- B9 i, N
  123. - `  r  w. {  n" }; m
  124.                 bottom = element.location['y'] + element.size['height']
    , }6 e6 `$ K( A% V

  125. ' \2 `" a1 s  V: P9 I! |2 q# L! F
  126.                
    % ^1 M5 [% {: I( `, Z( M  I
  127. 9 c5 }/ a8 A1 {; v
  128.                 #element = driver.find_element_by_xpath("//div['#captcha']//img")
    1 T$ m% |) S. z2 n! P' h
  129. 1 W( F  S1 c- j9 C& k
  130.                 #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")) U" W$ r( ]# ~/ e# y6 v

  131. $ E; |, {; q" A5 b% X4 v
  132.                 element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")- G7 m; e5 G8 F0 H% n+ K+ X

  133. . A& n9 Y5 Q8 s) r( p' W8 G
  134.                 a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')
      z) h% S" ]* e( u1 s1 j
  135. 0 E- s" U, V  ~9 m% N9 M4 b
  136.                 image = get_file_content('/tmp/screenshot1.png')
    6 V  \; u' L5 h) o: a

  137. * O/ ^; q: K6 T8 D. k, _
  138.                 a = client.basicGeneral(image)$ _* U, p8 ]: Z# z; \, j% o+ R

  139. 6 B/ f* F  z! z/ F! t' G1 s+ U
  140.                 print a
    ' |: O- K9 _. i  b. a0 c

  141. 7 m7 A" D& @' R  u& X
  142.                 yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words'])
    " J5 F7 y: B5 A8 r! y) ?

  143. % ?( p1 Q) ?# f- u8 z' G
  144.                 yzm = re.sub(r'\xf7',r'/',yzm); z0 E0 k& O9 o" `. L6 Y

  145. / {1 f) T8 u6 s
  146.                 yzm = re.sub(r'x',r'*',yzm)7 P5 c2 j" d* q/ w" q8 T
  147. ' g! @+ w8 ]) V; W: e2 D/ ~
  148.                 yzm = re.sub(r'X',r'*',yzm)
    6 c; B8 L+ `# Y, ~; o9 y
  149. - t; y( u2 _7 Q# `! n: v
  150.                 yzm = eval(yzm)
    1 Z* C% I- P8 l$ ^! A; ~: D4 [$ ~
  151.   X' O7 \* c4 x
  152.                 #yzm = eval(yzm.replace('x','*').replace('÷','/'))! {4 E$ g1 k. O  _7 }3 y

  153. 5 {" ^# q) ?. j$ S; h
  154.                 print '验证码: ' + str(yzm)) ?! D) @$ I( J5 @
  155. ) r4 A, N8 l& d) S, P, t. n
  156.                 driver.find_element_by_name('answer').send_keys(yzm)
    3 H  g9 d5 u) x# K- m4 g  ~* e

  157. - c+ B8 D' J/ {( `
  158.                 driver.find_element_by_name('submit').click()
    2 h5 i- O" H1 I& |9 G

  159. 1 e9 t* G  T7 c
  160.                 time.sleep(3)9 R! {+ m1 Z2 z1 s0 e

  161. 1 J4 I$ m; R- ?. t( ^* D
  162.                 return 1
    % e8 A6 \  ]& D

  163. . F. G1 j. W; ~$ F0 |
  164.         except Exception as e:
    2 {! S3 N7 Q$ \  j

  165. 6 u+ T$ u4 [. a. P0 O  _
  166.                 return 07 G  B! L7 P$ ]* Z  e8 l; Q/ J
  167. ! v6 W; D0 A! N2 @  o
  168. def followbutton(driver):
    - g: Z1 K4 s6 ]2 A0 K/ y$ K# Z9 i
  169. 8 t& O+ E5 Y" }5 r2 Z0 E7 T/ E
  170.         try:1 n- M# S( S& B0 i
  171. $ m& K) L0 o  u; j* A& e  p# @. t
  172.                 driver.switch_to_window(driver.window_handles[0])) v& v6 V( g1 c; N( ^9 p+ O" b

  173. 7 X2 W# ^( Q2 {# |5 D4 }0 R
  174.                 points = driver.find_element_by_id("currentpoints").text
    + W9 `  X4 s+ w; {4 X$ q9 v' v% J" k5 R

  175. 7 c0 B. u& X% u) y) E
  176.                 driver.execute_script('return document.querySelector("a[class=followbutton]")').click(), M7 Q9 H# n0 |' z- z! Q  R# p
  177. ' ^8 Z# s7 f5 |4 ?
  178.                 driver.switch_to_window(driver.window_handles[1])
    : u$ _4 B/ |- Q* m3 Q4 G" J

  179. & q- j" ^% f, W: _
  180.                 VideoSource = ''.join(driver.page_source.split()); f, a2 {* }  j8 b
  181. 1 T6 m5 G6 p9 |3 _+ y, X
  182.                 if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:
      p. o2 }" v# P  S; O5 D$ j& w
  183. , H+ B$ x* }8 P# i" N  B" K) n
  184.                         print VideoSource" E7 c, Q" L/ A3 B% q
  185. ! t: o& o( C# x5 G# C& e* t; e
  186.                         driver.switch_to_window(driver.window_handles[0])
    ! \+ R+ L$ t- }. Y7 W

  187. ( P7 X( @# `( w  S- u( b" y0 G' s
  188.                         print "Refresh...". o3 v' _( D, m$ |. L" D

  189. # n2 R8 ?$ C- `7 o
  190.                         driver.get("https://youlikehits.com/youtubenew2.php")  f, S, @0 m# I; R& A9 l- L  e  q
  191. # v. p6 C* |0 O7 X/ ^4 d
  192.                         time.sleep(1)
    ) o! V0 g& j9 b' @' t0 v) \7 A$ h

  193. + @  F+ r/ r# ?. O/ r4 _4 }6 m( M
  194.                 return points. |# t, _' H* w& G- N; j; N

  195. & n, \: W) ~( X' c- N; p- G2 z
  196.         except Exception as e:
    & ~( b% ?8 d. V* ?
  197. ! g$ z8 d- o- h: B  P0 C" e( G
  198.                 return 0" g! \& Z' t, d2 z2 L

  199. ) F% w# d6 S" y( a/ L1 e/ G
  200. for i in range(0,5000):4 Z+ b. B0 ^, W* d
  201. 3 _% p  z: q! V# L
  202.         try:2 ]/ A1 a3 r* ?2 P& i
  203. " Y* B0 o3 M+ U* m- Y! s
  204.                 captcha = checkcaptcha(driver)
    * w; i/ b5 I$ j% i- q  i
  205. 3 l" z* [0 F9 Y1 _
  206.                 time.sleep(1)
    , J0 Q% ^$ Y. A& ?+ l4 y2 u
  207. 0 `: A- c3 u9 n8 X# d2 `
  208.                 checkRefresh(driver)& N7 }0 @# C0 \% j, x
  209. . N0 h- v4 Z# v" ^, l
  210.                 points = followbutton(driver)6 i! \- p, Q% A- ^4 U) E# @
  211. / [5 j0 }' e' f. s: H8 k) K
  212.                 time.sleep(65)
    1 w' @2 S1 p' G" c5 r) M+ P
  213. 1 i( W( s8 z$ @4 l" m( |
  214.                 driver.switch_to_window(driver.window_handles[0])7 B& @( r% h% A1 Q' W4 ]7 S& K! z
  215. + W1 J1 x3 e4 \
  216.                 tmpp = driver.find_element_by_id("currentpoints").text1 i; i" v8 o- e4 ^
  217.   @" K6 ~  D( Y, n2 h- b  q
  218.                 print "points: " + str(tmpp)
    / w0 m- q0 T  z! `, q3 p4 C- `; T

  219. * p6 G& x- t' K
  220.                 if points == tmpp:9 S) }: S+ z% W% c
  221. " F6 O* N2 X! R$ P" A
  222.                         print "Refresh..."! n& u' L( c0 K0 v& F* I

  223. 1 E; b1 ?0 j  x
  224.                         driver.get("https://youlikehits.com/youtubenew2.php")1 t9 ^: {4 `/ n" [6 L, r- m
  225. % h$ u$ d' ]$ h( \7 }
  226.                         time.sleep(5): O- Z  J; L& \* l
  227.   H$ V+ P/ J" }# Z! m
  228.         except Exception as e:
    ; k/ a- X+ {/ p8 @

  229. / ]) i) Z5 ?7 p) [7 y: t2 K1 K
  230.                 driver.get("https://youlikehits.com/youtubenew2.php")
    ) w4 f( z- [8 T0 B3 m

  231. 9 t7 T$ w9 k& [, s7 h
  232.                 print 'error: ' + str(e)
    - \) P8 R# c/ `% w! A0 ?! p/ n0 i! n
  233. + y8 W2 g% `6 @5 y
  234. driver.quit()
    * H$ P# x/ x" r7 w* K
复制代码
! T8 S+ e% }+ N# q# V& J) z& L/ ~3 z0 W
, o. v( e& ]" G2 G4 f
: g3 S, g! I* h4 j3 E: h
因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。 6 R' {8 a0 _1 J( V+ f9 B; L7 j

" S: x# f' U/ x8 T4 L

评分

参与人数 1广告币 +20 收起 理由
小白龙 + 20

查看全部评分

相关帖子
Adcombo
回复

使用道具 举报

2

主题

27

广告币

80

积分

初级会员

Rank: 2

积分
80

社区QQ达人

发表于 2018-8-29 06:59:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

32

广告币

102

积分

初级会员

Rank: 2

积分
102

社区QQ达人

发表于 2018-8-30 10:17:14 | 显示全部楼层
跟我写的几乎一样,我也是百度验证码识别的,建议可以增加cookies保存和读取功能,省得每次都的输入,用户名和密码。他家是可以用cookies保持登录状态的。
回复 支持 反对

使用道具 举报

17

主题

29

广告币

221

积分

初级会员

Rank: 2

积分
221
发表于 2018-9-1 10:16:57 | 显示全部楼层
自动在https://youlikehits.com/ 点击么?
回复 支持 反对

使用道具 举报

1

主题

11

广告币

64

积分

初级会员

Rank: 2

积分
64

社区QQ达人

发表于 2018-9-1 20:51:05 来自手机 | 显示全部楼层
大佬太哇塞
回复 支持 反对

使用道具 举报

5

主题

580

广告币

980

积分

中级会员

Rank: 3Rank: 3

积分
980

社区QQ达人

发表于 2018-10-11 00:42:08 | 显示全部楼层
自学了几天selenium能看懂一小部分了。
回复 支持 反对

使用道具 举报

136

主题

651

广告币

2745

积分

实习超级版主

Python|Golang|PHP

Rank: 8Rank: 8

积分
2745

社区QQ达人

发表于 2018-10-18 15:11:47 | 显示全部楼层
用的是selenium库啊,我最近也写了一个小爬虫也用了selenium+pywin32模拟点击

点评

小批量的还可以,多了实在是舍不得cpu。 并发也是个问题。卡卡的 娱乐还可以。个人观点。。哈哈  详情 回复 发表于 2018-10-19 21:57
缅怀骄阳
回复 支持 反对

使用道具 举报

6

主题

53

广告币

96

积分

初级会员

Rank: 2

积分
96
 楼主| 发表于 2018-10-19 21:57:02 来自手机 | 显示全部楼层
小白龙 发表于 2018-10-18 15:11
/ v$ U2 `0 L' V用的是selenium库啊,我最近也写了一个小爬虫也用了selenium+pywin32模拟点击

9 Z3 D5 @1 ?8 ]% n& W5 f小批量的还可以,多了实在是舍不得cpu。 并发也是个问题。卡卡的 娱乐还可以。个人观点。。哈哈! f& b6 J+ C" ]+ @$ v, O3 M
% z2 \$ y7 ?- i& H% }/ U0 \
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

idvert

QQ|Github|联系我们|广告服务|小黑屋|手机版|Archiver|AdvertCN ( 津ICP备17003502号-1|网站地图  

GMT+8, 2019-5-24 13:38 , Processed in 0.079084 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz

© 2007-2016 AdvertCN.

快速回复 返回顶部 返回列表