|
|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑 & g6 o4 W5 Q! z" G+ ~. f
; ?) D1 _9 J/ }; h: ]
3 ]: i- h3 G t9 j0 g: [0 H
- . h8 y7 H# c0 g; f0 f
- # -*- coding: utf-8 -*-$ y" `) L! K2 j7 M
9 P4 D" g8 C7 u- from aip import AipOcr( p6 i" X2 Z/ Q* e& |% t* B
- 7 w" N% a' s: {0 W" y
- from selenium import webdriver
x J% t) s! s
1 J Z9 L" l# O0 Q4 w" @2 w- import time
. o5 s3 F# o6 M2 y) O3 [
5 T: c. D" g$ ~5 x& [- import random ]" Q" C. \! D, u G
; K" y/ `6 W b- import sys,re
' ?, t3 L: m1 D. a" G - - m; D$ a! ?% R' @7 I- l
- from PIL import Image, ImageDraw,ImageFont" ?1 F4 [9 r: p. ]# i" z
6 Q- O9 v) e8 I, }$ Y; d3 _* q- """ 你的 APPID AK SK """! u# P/ S; ~% m6 R, ^1 X! P
3 R& e, _3 e7 c8 Z3 d( a6 \- APP_ID = 'xxx'8 x6 O2 z; m1 ^9 D* }% H# P
- t4 T0 ]2 Q. B6 x- b& J+ K
- API_KEY = 'xxx'/ C/ z2 [' d) K# z7 R5 j G* b" h% z
- D" G# |5 }$ w( ~% R1 Y1 @- SECRET_KEY = xxx'
/ r/ e" E* b# ]# i' i0 X
w1 s+ i S3 u: I( V- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)- B8 u' v7 e% n( O2 Y2 b
- 6 W, H$ F! `. T X! D2 F
- #PROXY = "127.0.0.1:8118"* X& `# L! ]2 ~: N& t" R* j
- - g* ^' W& m% a) G
- chrome_options = webdriver.ChromeOptions()9 N8 ~0 N5 Y: c* [
; G: d* ^5 p. d/ i/ N: i' ^- chrome_options.add_argument('--headless')+ q& r, Q" |6 k
! k1 B+ S o2 [, _* A% Y6 [- chrome_options.add_argument('--disable-gpu')2 a" E. W% P- [; j5 h" x
- ( D% O% i) k5 R4 [; p
- #chrome_options.add_argument('--proxy-server=%s' % PROXY)
! H8 D: x! O- O
& z& m2 B; b5 I9 s+ `& [8 w0 h- chrome_options.add_argument("--incognito")
! {3 e# z. j: M) u1 k
/ `6 _" U9 j$ n' Z" M) r o# W% w) }- chrome_options.add_argument('--ignore-certificate-errors')
4 E9 @7 f5 o4 p% ~0 [% D6 a
5 I n7 e E0 q" j! w( I \- # Win: p W( k5 E+ X4 v
- ' x1 a9 a( L+ M, E
- # chrome_options.add_argument("--log-level=3")
* w3 T/ k2 A3 N/ \' Y
6 ]; k& e$ I4 e2 _* H- # chrome_options.add_argument("--disable-logging")( j& i4 C5 d! g
$ r" {' t/ k* T! T1 k- # chrome_options.add_argument("--disable-logging")3 C! w" H& z$ E/ M0 o; z6 M
0 r1 X5 R! Z! T$ L- j1 L8 ?- #chrome_options.add_argument('--no-sandbox')7 B4 L0 |3 n) r
- 4 K t1 H7 G* H2 Y6 R2 Z( y
- """ 读取图片 """! P" S1 q) R4 [9 |
! i# @1 _+ c9 y- def get_file_content(filePath):
8 b$ `9 V' s( k2 |" B, u$ u8 f
# t8 @9 C+ k0 n2 t3 U- with open(filePath, 'rb') as fp:2 C, a" Y! I9 |( {
, w; ^ x* m: c I6 v- return fp.read() R, _& P2 N$ V& l& _1 L7 P5 \% k# c
0 H: h+ J5 ^4 _ J- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)+ x* h i( X% X0 a6 W8 S
$ N, [7 o; H; H7 n# \/ ]* U2 [- driver.set_window_size(1280, 727)8 r4 D" ~/ D: R6 [6 T5 p+ r/ [
, _5 d e* {: W6 D6 }; a- driver.get("https://youlikehits.com/")2 z. K5 ^% Z* D9 P0 v
0 t' J$ C E1 k- z0 w: j$ K- time.sleep(5)7 h9 V7 m4 L' t
- ) d% L! F! e$ J- A
- driver.find_element_by_id("username").send_keys('11111') #user
* F1 x( ~3 @( }5 }: f, K
5 T1 M) g8 T: w3 H- driver.find_element_by_id("password").send_keys('111111') #password/ H# E' o4 s$ D& b
- ( q2 J! [) l8 A7 ^9 c& a
- driver.find_element_by_xpath("//input[@value='Login']").click()3 x) o& U( ~* S$ B# Z# E
- $ \3 r' Z7 e4 i
- driver.get("https://youlikehits.com/youtubenew2.php")
5 X; o( y7 X+ r. A; U- R' x6 M7 H( P
( N N U. E: t1 L) q6 y# u% M0 w9 M- time.sleep(1)
9 U3 ] l5 C2 ]! [& y$ s
) k$ v2 U% B8 |2 @3 \4 r- #Try Again
- u8 ~- e4 h+ g3 u5 X* y - % J9 {: x8 e" [/ x# F. p
- def checkRefresh(driver):
# _' q! y1 a6 j
* F# s# X1 c( w$ \# h5 P* f+ N! p- try:. W3 \; Z) p& E# U
- 6 m5 X8 V" e+ v( j, _1 T
- Refresh = driver.find_element_by_id('loadmore')% Q } j) E5 V# T2 B$ O( Z
- " e1 _. z, o- _# J5 ?
- Refresh.click()
" Y5 V8 S* t: M6 J+ u2 L: B - - i3 O0 }9 \3 {3 c4 w
- driver.set_window_size(1280, 727)( ^7 D# X1 O! m. w: ~
- , p, m9 C! m: `9 b7 L
- except Exception as e:
7 Z0 o/ f: z0 x - 0 f: v# H: X, |4 I
- pass
( Z3 f+ b2 M7 h; H# w' ?) e0 d+ E - 7 \% ~6 i1 `0 W I. q1 d
- def checkcaptcha(driver):1 W) S6 H$ M1 t5 T3 B, {5 a
- % X( o v) o3 F3 x# p
- try:
1 H" K' F' {4 N
1 q) u% [. I3 N# H4 U" r- captcha = driver.find_element_by_id('captcha'); |* v3 S% m2 G: }, ~6 c, _
- / d& D# F2 c4 J3 U$ v K+ I3 n* I
- print driver.get_window_size()
& D) b: ^- e' ?7 b2 ^/ e
, r# L% ?* [& m3 D6 M- time.sleep(2)( E4 M9 n& w* ] ]
- 8 v* `( d% _. Q9 f
- driver.save_screenshot('/tmp/screenshot.png')
9 r. B9 M/ I+ o - , Z7 N1 p% H0 k$ R
- im = Image.open('/tmp/screenshot.png')" n6 y* L3 N3 X" g# v
- ! N. W0 S G, q; f2 t# \3 k3 r* T
- #取消headless模式
q T2 G3 e( X* V9 Z3 r1 { - 8 a; r. L. _( W8 K3 ^' @, C& P
- #a = im.resize((1269, 610),Image.ANTIALIAS)
; x( f5 I. M. |3 m& J" j) I" P
$ B+ c/ G' A6 d- 0 |0 N# g; x/ D# G0 [' C
- a+ G* M; ?# k3 R- #开启headless模式( ~: \/ ?* |: i+ D7 ]
: p7 T1 l2 f t2 |- a = im.resize((1269, 727),Image.ANTIALIAS)
! o, a9 L( X! ~$ R- r4 N1 S. H - 3 k2 B; g# ?1 k5 r+ ~
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")5 p% U9 f" x6 p, a7 k/ Q$ _
. o/ l- H6 V+ E- I" G- left = element.location['x']5 A* c1 _# m$ q) X
( A0 s P+ R5 t8 E2 E- top = element.location['y']
; i2 b: c" t3 V* q6 H
5 ?& [! o' Y% ?& z: N6 i* g0 C0 C5 s- right = element.location['x'] + element.size['width']
( G" f; ^! \) t4 v/ s9 [
5 d$ G7 @/ v3 s3 U- bottom = element.location['y'] + element.size['height']
( ?" p7 X+ ^; s* T+ m - * q, l( E# Q4 P9 C5 M" s
-
9 G, J6 t+ J) D8 b% B Q) j - & D- K5 Q; [. K! G4 R
- #element = driver.find_element_by_xpath("//div['#captcha']//img")
2 x9 q& }8 S/ m
( m, w, v6 \, j" X$ z) c& Q- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src"); e0 U* y% f+ E- M! d, i
- ' [" m' I% X7 H0 v1 y
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
# K+ {6 \% Y5 w# z% C q4 |8 b( Y
# C" }$ x$ W: A" O- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')1 @, ~; j% h" p, c
, e" t6 {" M" i6 N- image = get_file_content('/tmp/screenshot1.png')* |& Q' v2 a) x$ G! m: Y7 Y
) L; N) F0 N6 s1 D- a = client.basicGeneral(image)
2 E! F' E7 L0 F7 U% u' N- G
0 n7 j" u! a3 P% ^- print a: O; G; M( C+ x/ n0 s7 q
- * A6 T6 M$ P1 X8 J' D8 }
- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words'])( j( H* y2 _. ^* q6 k
% J- U8 k5 e U w1 c, K9 p" p% t- yzm = re.sub(r'\xf7',r'/',yzm)
7 H8 w2 v# V) y. \
% W3 {. Y ~2 r; e9 c! l5 Y- yzm = re.sub(r'x',r'*',yzm)7 v3 N4 C* ~/ [- K$ _4 k5 e
# Z, M" ?$ f5 U7 Y \- yzm = re.sub(r'X',r'*',yzm)
4 U8 o5 o4 `1 T7 {. g- P* f
* H% n' H" @$ }. Z4 L: w. b9 a$ ]# c6 S- yzm = eval(yzm)
5 e& l+ {' ?0 t - + k. z& ?/ W$ M" b: Z% Y: }+ o
- #yzm = eval(yzm.replace('x','*').replace('÷','/'))
( }9 Q. Q( L/ v, J# z; p' U
- F' V/ i7 K5 G& }% N8 o' z- print '验证码: ' + str(yzm)
0 F" `& h; o5 {- [: g" ^
' e3 Z; y( `+ o/ p4 M4 o- driver.find_element_by_name('answer').send_keys(yzm)4 K h, ]- f: |
- 0 u3 \& |6 f5 e; K5 u5 C
- driver.find_element_by_name('submit').click()
1 e8 j* J* h" v& e' b
9 R$ c! n/ z' S D- O- time.sleep(3)/ d7 d, b% j8 f4 G7 U* i# F; }
- ( K4 o5 C* q$ K: s! i/ f
- return 12 n5 d- x' R+ P& V
- 8 e, R) c8 z, @7 s+ N4 t& C; }
- except Exception as e:* Y9 q" a& S! d( i
- 0 J& P1 V, e* C& R! s
- return 0
# z Y( @9 d2 i% H( h - / }9 z6 d# x7 c0 m/ c# t- I( e1 t2 K
- def followbutton(driver):
0 \& K" d( a+ w
) l# V$ H5 }2 i1 v- try:: H) c$ U9 b' b2 @8 k. n/ ?0 p
( B+ a/ h6 o! O' ^0 Y- driver.switch_to_window(driver.window_handles[0])2 u1 r3 l/ v& }) ?0 [2 S
|$ n& h1 L, X m/ u- points = driver.find_element_by_id("currentpoints").text5 L2 D$ P# S8 J% `$ ~
5 ?, ?& _ f% h$ `7 @$ F; z' ^- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()
7 y, Z: e m# w( J3 ^8 |* _
: ]$ l0 y& X( X- ^- M6 S+ Q% p- driver.switch_to_window(driver.window_handles[1])
2 c, n, `0 B) w7 K( g5 y
& q2 j- ?& f$ {9 \. y0 e5 j w- VideoSource = ''.join(driver.page_source.split())
: u" A6 g0 q, ]: ]; Q
& b+ G6 W# T- a. V6 U- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:! ]$ O! h% r. J, r% ?
+ G0 C& n y( d9 K# Y- print VideoSource
& `$ C: p& W* I5 E- h4 ~" f - ( }: v5 S1 l% V9 l5 d
- driver.switch_to_window(driver.window_handles[0])* n {- o2 `& k. R; u+ X
8 q9 p0 L1 H7 x0 `0 Q& \3 @- print "Refresh..."' i; R3 M3 u0 E( ?# Y. B
- , I( c0 ?# v9 |
- driver.get("https://youlikehits.com/youtubenew2.php")
8 g* c1 u, T4 h) M% X, r - . r1 q6 n- G# P {" W: W
- time.sleep(1)
+ c( p& M3 j! r& C3 l5 E& w
+ i8 ]' o6 t2 g/ e- t5 B- o- return points
9 D$ n. G/ B6 y/ x4 k- @7 i; Z4 _- o# j) D - " s( L; Z. z j' i
- except Exception as e:/ B1 o ?* C# r0 r/ g+ P
: K2 W. t( z! ?1 E4 ]% V- return 0% D; X" `# d5 ^' Q$ _' V7 g9 C
! d, E4 a& k5 W7 p0 L- for i in range(0,5000):4 e; t8 W a j- y
2 h( c& i }; z' J; L* E `$ C- try:% e% j5 B) U) w. L+ R1 \
! k0 ~$ @: y, P( u; ^( W: @6 }- captcha = checkcaptcha(driver), d+ |# E' E: c7 }7 A. u( S5 e/ X
3 Y6 q5 V/ S' X6 V3 a6 A- time.sleep(1)
0 D% {4 T' y: d
9 V ]- N' X! x+ U* H, h# z- checkRefresh(driver)
/ t4 X" {0 T7 k) c2 k( m
, A8 n7 O, ]0 P- points = followbutton(driver)8 Z: U7 m6 u; ?! p3 s* o/ X
- 7 B9 t8 B+ D1 G d+ w% A
- time.sleep(65)1 q" ~( [5 B* Q5 \1 W- M: _' m5 q
- ! t$ \3 w) t" o0 t& d1 n
- driver.switch_to_window(driver.window_handles[0])
) Y. z7 x, q8 q! B/ d
: \) T, m0 t) J- tmpp = driver.find_element_by_id("currentpoints").text- w' H7 ]/ f# h. M& `4 I/ h/ @. a
8 ~9 p/ V3 a& D& X1 c: v. j- print "points: " + str(tmpp)# ^/ V8 C/ F! w( A4 J! M) r
- 1 @ E" i( W9 j0 W4 h
- if points == tmpp:% R g4 O) Z. o& {
9 S4 k: N! m- Z+ t+ ]# N- print "Refresh..."; V6 H7 t, q# P1 }0 Z# C# G
- 7 G$ `6 w, C0 V, s( L- u7 s A
- driver.get("https://youlikehits.com/youtubenew2.php"): \6 t5 v/ ^! d- S! S( d
- % a. F. x% }' @- ]9 Y4 D! P
- time.sleep(5)
/ D6 h4 ]; u1 g. W
4 W1 k: e+ j) J* h# X, P3 J0 g) j- except Exception as e:+ g" s+ v# M! b. h( P, |/ Q
0 _3 k7 T! ^4 @7 W' {* t) U- driver.get("https://youlikehits.com/youtubenew2.php")
O" H* o9 X% J; i) O
) e& [+ Z+ R' r- print 'error: ' + str(e)
% e! `! l7 N; J/ `3 O - ! m5 J' `' s2 n' a
- driver.quit()
% e+ |7 E0 f2 c# p) Q% a
复制代码
8 E' ~4 O4 G: ^: f" T
4 G' T$ X( c8 [: r" `! l# ]- \8 H" r: Z8 t
因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。 8 |( s! W8 y1 J& J
2 s! d( ]) j0 a* z1 p8 a |
评分
-
查看全部评分
|