|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑 ' Z3 T O5 h# f( W( g% l/ a
) f# w/ |' H2 s: L: L0 f2 j
" k+ \" N2 m2 Y, t6 ?- " d3 N- t4 Z, H+ g0 F
- # -*- coding: utf-8 -*-# @8 ]$ K& `- s
. [" ~+ ^) P2 J( _# l# h- @- from aip import AipOcr
& V3 {) _6 a' V
2 E# I) H4 e' x! g2 S4 W9 P, J- from selenium import webdriver
! u, q: V4 N+ A& V& ]
$ @" z; a4 C {; t- import time
1 J0 J) T) E g+ @; K/ {7 x5 r
2 V0 s. _4 H! n, E6 d- import random
& c) W ~6 h/ c$ W - ( O( }: d" k8 D2 ^5 J1 `# u y" }! j
- import sys,re
. J# y/ [: u# X7 _# F - , c8 Q* j" e `8 x
- from PIL import Image, ImageDraw,ImageFont
4 {7 p7 ~/ z% a( o8 O2 B3 B+ k - 0 G* G$ R: G% M4 E
- """ 你的 APPID AK SK """
" l- g4 l5 r8 W( F% I+ v - ! u7 [5 Q- g; T( j) N& i
- APP_ID = 'xxx'
9 D* v& l/ G4 A) k9 L. L- S7 F
$ x, o0 ]6 j t! d9 j. q2 v& d4 I- API_KEY = 'xxx', B V( i( w' E" Z, s& g! }
- $ f+ s. R2 Z% ]1 m: D" R0 l' S" s
- SECRET_KEY = xxx'
! w8 u! D3 |) a! D7 Z, v6 _
; o9 T, b; f2 w- D- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)* n, H/ w9 X0 c6 j
" I+ N/ ?0 @; n8 O+ |1 p( B, ?- #PROXY = "127.0.0.1:8118"
3 v+ L( e! J8 W' i* F# |! J+ k+ s - - ]4 I$ h q# }: [$ W
- chrome_options = webdriver.ChromeOptions()# l8 |9 \1 g& o& b
+ \7 M# Z, H; n; B+ M- chrome_options.add_argument('--headless')
- O- J2 k7 [9 ?) Q" e i) T - / B1 N+ [! ~5 j7 X" p/ d
- chrome_options.add_argument('--disable-gpu')
; |/ U/ [* G! B9 B% {2 K - : c) }0 H) `& V) ?
- #chrome_options.add_argument('--proxy-server=%s' % PROXY)" w3 Y. t( c: j' T' i9 r) T
- 0 a: l5 b4 F E* _
- chrome_options.add_argument("--incognito"). N( A% K0 g% t
- , Q4 x" X7 g+ S/ G0 X6 s
- chrome_options.add_argument('--ignore-certificate-errors')
/ }2 k, E' \6 J9 T" ^
1 X& }6 a/ d' M- F7 T: P+ l- # Win' n4 ~; C$ O% \1 V* w) E
- / j1 n" }! T8 ?) g" \/ p0 r6 `
- # chrome_options.add_argument("--log-level=3")+ C# }: D' x# I+ B9 t
/ [7 U8 k6 R. L- # chrome_options.add_argument("--disable-logging")
& d7 e W$ V! _ ^- ]1 R7 L' x; N - - P% f% M. q" H5 u
- # chrome_options.add_argument("--disable-logging")
/ H. N5 L0 J7 [5 ?' Z
3 h) w1 n7 `& y8 ^( \- #chrome_options.add_argument('--no-sandbox')
, H$ i( o6 ^! X8 o$ D) y
$ g# g6 [' Z" l K5 |- """ 读取图片 """0 y: a* ?4 K. [' V v* t' {1 \! |. R
- ) N+ ~3 Z$ @# F
- def get_file_content(filePath):
% R ~3 `( p# m
/ g2 A' [0 ?, O2 e! w. L( L- with open(filePath, 'rb') as fp:9 g' _$ H) [+ D2 Q
- * H+ r) s: o% @7 c6 i! r# X
- return fp.read()# \: h& `+ z- [) Z9 o; X! c
- 5 X3 N& P8 ~2 R% D3 q) p! `; c
- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)
" Y" M: j. J4 r r G! S5 e# B
/ Q* ~1 i6 _% g6 r9 {2 G* p- driver.set_window_size(1280, 727)6 _7 E ]8 [1 s( R
- ( T) j* h3 g& Z% P) `
- driver.get("https://youlikehits.com/")
7 }# Z4 Y( Q6 b! D3 Y: h
5 [1 T$ I3 C+ b- time.sleep(5)
" g, S; b& N9 } - 7 F/ f; W2 c; q3 G" D
- driver.find_element_by_id("username").send_keys('11111') #user
- l; u4 q; s! o+ L* g - + A- T! @! z5 c' U& p" {
- driver.find_element_by_id("password").send_keys('111111') #password' O. c/ A# I( c' E2 d, X0 S/ E
- . D8 }2 _; ]* [2 {8 u
- driver.find_element_by_xpath("//input[@value='Login']").click()
; i4 t: W& [7 F$ q, U
9 R% g4 \* l/ X. h- driver.get("https://youlikehits.com/youtubenew2.php")# T! v8 j$ c) L) D! r; l. n3 g P' o
- " C3 B3 X2 s; d- B. L: i
- time.sleep(1)( ?- \( w. Y3 P: J o! F
' Y C7 G; ]$ u& y) K- #Try Again7 C1 S J' X3 ^- n
- 2 P; S) |( w# q8 p& Z2 \( r
- def checkRefresh(driver):
# S& l/ ^& M' ~: r( ^# t - ; U) E. K- Z8 w3 L# t7 w( Z; ~* T! f
- try:
. G6 j$ B6 `* l* ^, _: i - 3 B2 m; B2 W% l1 i( J w" c& |) r
- Refresh = driver.find_element_by_id('loadmore')
% p3 H7 f' m4 [( ^+ ~
& b/ Y: b5 W0 s4 N- |( Y- Refresh.click()
/ |7 R2 P$ j8 f P
, \' [' I3 ~6 O0 ?" m, _- driver.set_window_size(1280, 727)& s6 z0 w! D0 J
( |4 I- i4 t# Z% W- except Exception as e:& F' J" Z0 g( t8 o
- 0 b& Q$ ~# n" E1 ~3 z. k f0 ]) l/ O
- pass
1 @6 w' B1 }0 Z0 z4 b6 J0 G4 \
4 ^0 {0 f. o+ u) @9 p/ M- def checkcaptcha(driver):
# S0 B7 A: A3 E- {+ S - . ]. X% X; R# B! [% @) r3 B7 N- w
- try:
" k* u* \! p' w( l5 S1 q - 4 v' W; ^! |9 ^7 H9 {/ e u- x ]
- captcha = driver.find_element_by_id('captcha')
& s& r% I7 a `! E* f" s6 C
( \7 g: T' l( H8 R$ M& p- print driver.get_window_size()5 `" n1 H9 u. O5 ~7 z5 J3 Q; M" i) b' o
) ]) @6 Z9 g8 K4 `7 n* A/ J- time.sleep(2)- V; C+ e# a1 \6 u+ i* B
R1 L/ t' q! `! {5 z: G- driver.save_screenshot('/tmp/screenshot.png')( \" U; ? x1 X' C5 Z# p1 {! k4 v
- ; K5 ~) _5 ^) w* A6 {8 M3 I2 d
- im = Image.open('/tmp/screenshot.png')- L7 _: [2 q; H; L) K
2 G: s1 [: ]: Z; r0 e% [- #取消headless模式
6 t+ }, z1 E0 K" r* m! N- ] - : H5 S# b* \4 w$ h9 c0 B; l5 a
- #a = im.resize((1269, 610),Image.ANTIALIAS)7 S* w+ @' s# K9 w" @
- " E: _! C/ K. V" p
- 9 O- W) G$ N, A e9 Z9 B, w
p0 R9 ]% b& Q! L! b- #开启headless模式3 H% @3 \, F; w' w; J
- + e) Z( W) s3 M* ?3 u. \3 k& \
- a = im.resize((1269, 727),Image.ANTIALIAS)
" {( F, x8 q8 [2 a3 }
. }- P* E" ~# g0 R% g- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
X& V# { S0 H& _' f
2 [. n9 y3 K" X! E2 w8 S- left = element.location['x']
+ u! f6 |5 p, ^; }) k - 0 T& u+ M8 g+ c; L5 W
- top = element.location['y']
5 u* C4 b( W: U; a' e5 R
8 _( O8 O1 n: {, \: i" c3 ]; F; m- right = element.location['x'] + element.size['width']
o! X0 U9 O; ^ - 1 w* b- n2 @) L
- bottom = element.location['y'] + element.size['height']
- M- X1 [! \8 G! ~ - 2 Z! R- X/ W% H; D6 y9 X
- 4 T0 K. d# U: B
) o2 L5 j& V( n- x- #element = driver.find_element_by_xpath("//div['#captcha']//img")$ y8 T& k4 Y( Q* p8 |; D
- * L, M. n4 o! }/ ^8 H9 K. K0 V
- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")
p8 n/ X# G4 E' V/ g+ Y
$ f9 ] i- P& W: d- B8 E0 I# i- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")+ t: D; L) }; R" F9 D# @
7 {6 p" w7 s8 m" k- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')
, {! G% q5 L. f
' h3 R5 b! O, O- image = get_file_content('/tmp/screenshot1.png')1 `0 j: o# V3 `5 }- N' K
- 9 _; m! v, v9 S0 l# e$ U N+ Y
- a = client.basicGeneral(image)7 h8 V* l, F% B8 }, i
- 2 ^4 A. ~$ d5 [# s
- print a
/ I3 X2 f) f3 W. l2 Z - 3 U7 w; N" Z) M+ P1 s! \! b1 j0 s. n
- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words']). G7 v1 ]8 S# Y ]) S' z$ M# Z
; ~& |* l% s# p- yzm = re.sub(r'\xf7',r'/',yzm)
/ N- Z# {( b9 z) I
- b9 |, |/ n( }1 n5 d8 }8 W A, D- yzm = re.sub(r'x',r'*',yzm)" \, c9 w5 l' n; z* k
$ _0 @% ]2 @- e: u/ p$ k- yzm = re.sub(r'X',r'*',yzm)& E2 t9 y7 L. z8 g7 J% u# k- L
: R! \! ?4 q5 P, f: ~4 F" R- yzm = eval(yzm)
/ ] v0 e( ?* M
" @5 a, v6 o0 G6 t' x% ]- #yzm = eval(yzm.replace('x','*').replace('÷','/'))' m- ?( t5 X# G
: U+ v9 E2 _" K. Q: ~- print '验证码: ' + str(yzm) o% I( z% c1 W. L m
; [- }3 Y" z H8 c0 X$ M2 {- k- driver.find_element_by_name('answer').send_keys(yzm)& r2 ]/ E3 O8 k3 d
2 s4 ^5 ]( F. m7 f5 t' G. g2 I2 H: r- driver.find_element_by_name('submit').click()
0 x1 X1 l, N% A! ?( F - 0 h" V/ \3 G0 r3 k. l
- time.sleep(3)$ t$ E, z9 l' n5 T/ h! I) h/ I
+ e8 j. \5 v! S" x+ r0 l" h) u- return 1
- ^6 T3 j3 j" x7 M* J! z3 Z+ L - 8 x$ F9 F' o. d3 v5 ~9 I
- except Exception as e:
8 L7 {' x0 f4 c - ; e$ r, N' l. w4 j
- return 0
* r& d8 \/ } p% w/ v
/ p$ s6 y" x3 R$ X4 K+ W3 C' H- def followbutton(driver):& s0 w) t3 e3 t6 o0 h ~, _4 x! m
- 7 f% y* Q( J- k2 T+ K
- try:2 C- f% V0 H. ~) g0 \
- 3 K+ K" {$ u! f; V5 v& e4 j% |! f9 e
- driver.switch_to_window(driver.window_handles[0])
4 z/ f, @- w& s/ _ - ' s% G2 {4 [8 f4 z2 W/ i
- points = driver.find_element_by_id("currentpoints").text
( z0 T3 Z! T: ~7 I: e - * }# R2 s* e( `: [( v
- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()
n# D- {) Q, d - & p, r* W; r) a2 K/ _ i% m
- driver.switch_to_window(driver.window_handles[1])
4 ~$ D K2 l! O2 { - + n0 s+ G1 S, [) @" P! F2 [+ e
- VideoSource = ''.join(driver.page_source.split())
3 t+ m$ z* y" U) r% ~. o - % K& r K1 S8 Z0 q
- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:$ N x2 F2 A/ C6 R6 K9 c
- * z/ b+ I" ? Z% R# ^
- print VideoSource g+ d1 t6 m; z0 x! U- ~
7 l8 x( T& }4 J* W8 m7 C5 W b- driver.switch_to_window(driver.window_handles[0])
4 y, h5 c' Q( p - ! c- F t2 c6 z0 N
- print "Refresh..."6 [: {% Q* n/ ?) t4 S
* {9 E5 n1 j$ e( d+ q- driver.get("https://youlikehits.com/youtubenew2.php")8 y- _, I I- f# ~. V
: w n" [" ]% N5 ~# k4 N- time.sleep(1)
! T' r9 i x3 M2 L7 n
) C/ \! K5 }. q. h- return points
: C/ S- \2 |8 L4 v X
" _$ `" O% V" C* f( n' N0 X- except Exception as e:. N2 G$ h1 H0 I6 f) T
! ~9 P) {! O& u* ]- return 0: o$ x* \ c( F* v! h, z
9 h( z5 z0 K0 z' }- for i in range(0,5000):
" V Y) s6 c# Q7 h - - j$ H$ c7 C" v: W
- try:6 N) t0 P4 @2 h6 t' Y* ]; z: h; I' A
- ; Q( \6 W+ I$ w: d' z$ z3 C
- captcha = checkcaptcha(driver)1 s+ i" X5 h! c ]. b/ H1 T# T
* C/ \1 e, b4 t X9 A$ E$ a; I& j- time.sleep(1)
* ]! ?% J) Y3 X9 v& \# \
: t& [6 X& k- D" ~! ]1 g- checkRefresh(driver)1 J$ G; W+ r* R! z
) ~. P3 N% z- C7 Y7 R- points = followbutton(driver)
; x8 z, [& p# ^ - & Y; |* X7 e7 T/ z3 p
- time.sleep(65)
4 P6 h" R4 c4 W7 V% g8 O Y
: ^$ }3 W+ G: B& q5 \- \. w, R- driver.switch_to_window(driver.window_handles[0])
% v# }# o) N4 |+ z% e - 0 ~: L. o* r, o0 C/ G, i
- tmpp = driver.find_element_by_id("currentpoints").text
7 x" c6 C6 j1 I
4 H, C* x3 j; h$ Z; X4 P- print "points: " + str(tmpp)
. K" T4 R& u# C! g - ! @& ~* s S4 g5 \
- if points == tmpp:; v" F- e. L: \. ^" [, z# a
- : p, I3 u4 X, B R/ k5 W) a
- print "Refresh..."
" f$ [( ~* _9 O5 A - , `) v' s+ E t `
- driver.get("https://youlikehits.com/youtubenew2.php")
: z. \; g* V+ B+ I, {5 u8 C/ Q8 z
! W9 T4 I. u& B- time.sleep(5)
6 ~4 C8 P; i, z* }1 ^3 h( J4 o
5 p, d- M7 j* P7 `- e+ V- except Exception as e:
: E L3 H6 f# k! t* ? - 1 X$ A Z3 N* z7 |& b
- driver.get("https://youlikehits.com/youtubenew2.php")* f+ S7 [. N I3 e
- & C+ ?5 }1 [# V! w7 D
- print 'error: ' + str(e)) Q8 ]' Q2 {1 `' U3 t$ _
( ~* e) o, m2 B+ W% F- driver.quit()3 S- T& b4 M1 b: D" B3 g
复制代码 t Y4 g$ Y9 V, ?6 G N( d9 \' U
/ d6 f5 u. l7 H% r, s \
- M( e! G b6 f% Z1 w 因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。
+ k( k2 E: h. u- c6 K; M
6 q8 d( N6 y: z, e/ {) q0 W. n7 W |
评分
-
查看全部评分
|