|
|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑
. q& |7 m* t l% q; B+ Z! r6 C) p7 V, i* m, k
; Q! `5 D, L' u
- $ ~; w$ B$ J8 k" v
- # -*- coding: utf-8 -*-
% P% i% V! n" u9 S, t
' F) H- X/ F' D! J% N. N2 c8 u3 m: F- from aip import AipOcr
2 K& r/ t+ K$ z4 f) @" C7 d) E0 X - / d; R& X, |2 f$ J( k3 \
- from selenium import webdriver
0 C3 i0 ?" U, _, j
$ P& q! Z3 l2 @/ U2 w6 Z$ _- import time
0 O* J+ ~( |% U - - G) E6 N/ A1 }6 l# p, a' S6 m3 ?7 n
- import random+ M$ u* g0 J9 F7 X- N
, @* R3 ]( L7 M" l- ?5 C- import sys,re
@! i1 J p7 Y. o# \8 H
) P9 k4 U4 c% H5 P. {- from PIL import Image, ImageDraw,ImageFont5 Q& U; l& X, S) _& Q( q$ f
/ y: p) l$ t, P2 h4 W& F- """ 你的 APPID AK SK """9 P! i! g" G+ ~, x6 E D% V9 Q& m
- ) Q4 a1 f5 \( b) o2 T* H
- APP_ID = 'xxx'
$ k# k6 }9 A* H \ X4 s# W- } u
; x. d+ ~* D. U" W7 m) G9 Q- API_KEY = 'xxx'
3 t5 Z7 G( } H - 5 a. g: D9 I- ?. t
- SECRET_KEY = xxx'6 z; ^! q# n5 L: o# g: u5 o& _* j8 R
- ) D' @. X7 \6 C$ J" k% i
- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)& ]9 S, Y2 q6 |. u- e$ O
- . F+ }6 z% _2 T0 V
- #PROXY = "127.0.0.1:8118"
9 h. y9 F* j* C4 R/ B9 E# u
% ]+ C, R7 L$ S# R8 T* c- j+ w- chrome_options = webdriver.ChromeOptions()- W5 v. m1 B( y) g; B: s
- * E J) f( ~) n, O1 y) l
- chrome_options.add_argument('--headless')5 _4 [) c. e. z, n9 z
+ O7 k; O% d! b8 I* ^- chrome_options.add_argument('--disable-gpu')0 |/ Z, X k) v, |' |) p
( F. s1 Z, E( F( m) W- #chrome_options.add_argument('--proxy-server=%s' % PROXY). e* U; k$ H- n* Z
- * w6 Y+ _* k, F- s8 e
- chrome_options.add_argument("--incognito")
$ z4 o& [* ~8 p/ k' V: c1 b - ; v' G# \' K4 z; J" V" y
- chrome_options.add_argument('--ignore-certificate-errors'); ~& ^9 D1 T/ o5 N
- 8 i$ J: q9 I# F
- # Win
$ M( S2 ^( V" y$ K* J' h - ' _) }4 l/ S% _9 n
- # chrome_options.add_argument("--log-level=3")
: F: l" Q" s% a5 _8 M( ?3 L - - o. x" u& ~0 S" I- Y9 C7 g
- # chrome_options.add_argument("--disable-logging")+ _# F. f! s% `) w r$ I! ?) r
- ) T) [& Z: A- K3 M' \
- # chrome_options.add_argument("--disable-logging")8 H6 o: n( L5 @
# m6 M; b& C! v+ d5 z0 F, c- #chrome_options.add_argument('--no-sandbox')
2 o4 F& A5 T$ B& ?* ^- I, ~& j - 7 ?3 L% Z) K: Z, p0 s! k
- """ 读取图片 """
0 E* N0 m4 g5 s- `' X
1 F* i' F* W) o" E; N& N- def get_file_content(filePath):, k+ X" e% R+ F' F j/ q4 G) e+ V
$ D& N" ^3 Z" X9 z" D4 ~- with open(filePath, 'rb') as fp:. G7 N9 u2 y% d1 q- i+ Q
% V9 @# K$ F' H2 j# [' h, ]- J- return fp.read()
: n! c1 R2 N1 M: A( o# w$ i2 A
0 Y8 }+ W' x: L% m6 d- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)) s; s9 ], h) a; ~7 d
- + ~" _# i+ q( f" F( U
- driver.set_window_size(1280, 727)
& K4 z J. x8 l1 I! W$ f1 D - 9 J+ p/ p u8 i9 F
- driver.get("https://youlikehits.com/")* S' }9 ~6 D% v% A& p
4 R) ?* N. ]: t+ Q9 T& x# u& C- time.sleep(5)
5 S, a) L7 v0 `6 G1 G5 [ - - ?8 {& X$ Q% `# t# H
- driver.find_element_by_id("username").send_keys('11111') #user! \& e% h& v" ?0 h5 W
\5 w! G# X: }" H. y7 \- driver.find_element_by_id("password").send_keys('111111') #password
! Q" \3 V2 S C/ V - & M- g$ W& I. N& c6 y/ N
- driver.find_element_by_xpath("//input[@value='Login']").click() l W3 H1 |4 }1 b. k* W
: Z B+ L! O) }- ?- B k- driver.get("https://youlikehits.com/youtubenew2.php")
2 g6 x0 Q" n5 _' h5 i
, d7 g) U& B* Y3 P5 ?9 c( f% y- time.sleep(1): x4 m3 x: b w# d v/ q9 ]
- ( }7 Z' m: F. }5 Y3 H
- #Try Again
& v8 m) ] V0 d% c/ x! Z - - C" O6 V# q- _) r3 W$ t
- def checkRefresh(driver):) p3 k4 s- v- k( X# Q1 K! L
* g: H6 i/ x# o9 J; W" V- try:8 b3 c! I e' y) k
7 A+ M4 T- Q3 S- Refresh = driver.find_element_by_id('loadmore')
0 e' V* Q+ y2 S# u+ ?9 J5 @7 c! h - 4 \5 q5 h$ q' Q" _
- Refresh.click()3 E; l `2 M- x/ n2 z: a
- + u! `! `2 O I
- driver.set_window_size(1280, 727)
$ {* N5 `+ k. s+ t
" e. M; h7 U* a8 A, n2 V- except Exception as e:
8 J- d1 ?0 \4 ]4 L
3 |5 A4 V" d# M$ h- pass1 [5 l* h0 q+ F' ]$ _
- ( F6 @; v8 P8 ^3 b3 J3 F$ G' g
- def checkcaptcha(driver):
$ b# N6 W& p9 [, u1 b5 m
/ i$ c$ X% r- p: R- try:
' R% l2 L9 G* U - % n& d9 i& a7 L) t1 r3 \
- captcha = driver.find_element_by_id('captcha')8 s# f* t. f% x4 _
- 5 {* @6 h, x) w; S& Z: H# M' E
- print driver.get_window_size()
, n6 J$ a+ Q3 }$ s - 5 w3 |! d2 z( a# v7 s7 k% i- ~
- time.sleep(2)
# a6 b* e9 B' Q2 i) p1 Q$ g( w+ l - 3 u8 @( ^6 f& X
- driver.save_screenshot('/tmp/screenshot.png'), ^$ N- r" c& t. i
a8 L* {) i% ~% I4 T. j+ Q- im = Image.open('/tmp/screenshot.png')& X: [) N# g) }0 O0 r( j# l
0 i3 j% ~. w x* A7 ]- #取消headless模式/ T+ E1 p% p! E9 H0 n" Z; a" I
& e. c+ ]1 d& U# P5 a- #a = im.resize((1269, 610),Image.ANTIALIAS)
* G! y) C5 F$ {6 p% z4 p - * M- g- _, ?: {
-
1 n5 I0 C3 y* k% A# A6 p% @
& D9 l+ o1 [" `' f& j2 `* f- #开启headless模式. r/ ?1 r7 N' i* `
- + T3 M0 m8 Z! D0 n$ w% O% t
- a = im.resize((1269, 727),Image.ANTIALIAS)
$ N1 C0 g; c. A3 O0 Z
2 ^* m- g3 ?9 e. l" y, \- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")3 Q. i& H& x. E1 u8 z& ]% ?
- ! v! q4 x" V7 ^; x$ S
- left = element.location['x']+ R1 R' q! S0 Y8 E/ D) F
8 G8 y1 j' ~) g# F- top = element.location['y']
$ v- V* y4 t: u& O$ o
2 u8 k s; Q. M: m- right = element.location['x'] + element.size['width']2 ^; [7 H9 M. D2 M
7 g1 ?5 T* k; n" T* Y$ V& t! u4 h- bottom = element.location['y'] + element.size['height']
/ i- C" M5 H# F9 J( k; _! t
. Y* Y: C) ~1 b2 ^1 n- 3 N) t: n" `+ S3 m: z% i
% ~% z( p' T, r0 p1 G) Q- #element = driver.find_element_by_xpath("//div['#captcha']//img")9 M4 d3 f% V9 T
- * }# S" z! A9 l2 H3 P
- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")
- f9 {% x5 n$ N: m1 w; G5 N
# M' v/ ?* F* c2 E- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
) d% u- m T; h0 q- D$ X; P/ E - ' Q) H) b% U! c7 b+ } F, b4 U
- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')2 a* U$ K/ s& O* c3 k
- c+ e- e5 Q" F" U6 R
- image = get_file_content('/tmp/screenshot1.png')
5 _& h$ e; x* t( K! k" C
3 E7 o) ~, m4 N7 h K- a = client.basicGeneral(image)
# T4 h% C8 I& V) Y( E$ Y G1 E8 l4 V
" u9 P0 Z: I$ ~2 U4 D0 w- print a
2 w6 A- { ~ S
( s' j! X6 n( V2 \- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words'])
% l3 T: D! L0 h" i' l3 b' v( F
1 I T! {) f4 M- yzm = re.sub(r'\xf7',r'/',yzm)
6 L/ W$ ~* x0 u' m3 z; n( G8 m+ \ - 6 @) c. X3 a: a" M4 l$ {. L- Z5 x
- yzm = re.sub(r'x',r'*',yzm)
$ P" P# d, L; C& h! y - : r A; E+ F, l* Y! Q+ i+ q" G
- yzm = re.sub(r'X',r'*',yzm)) _% x; f& B7 b& C0 D' l
- & t" F4 e2 w; s0 P8 U1 j) N
- yzm = eval(yzm)
~/ B8 A; Z, |( f% s4 V
, F5 I' p8 z8 }+ o- #yzm = eval(yzm.replace('x','*').replace('÷','/'))( s2 ?) L2 \7 M+ |( G$ |
- , u- ?# \0 c* d, x z0 p% ^
- print '验证码: ' + str(yzm)
$ r4 ~& H* }! H* `( j& Q
8 I- ], \+ i5 F4 _3 j, R7 h; @9 f- driver.find_element_by_name('answer').send_keys(yzm)! a! M, J Z: O
- 1 u3 N$ T$ c% K' q
- driver.find_element_by_name('submit').click()) x0 ]+ W' p5 d6 X0 ?0 N: q6 L
/ c% o9 q& w1 L0 Z- time.sleep(3): D5 _6 t1 o! u; l; P
- . E+ m, }. @1 B+ W+ N- {! j
- return 1- e* z! f4 k: M' N7 C- F
. \2 Q" |. K( f* n- except Exception as e:' J' r7 L G4 T. M
- ' R( T5 E9 t5 K- K3 ~; O; t
- return 0 O5 h5 m3 m1 F2 x* P% a* H" k. n. G- n
" e+ @! Y3 C2 [& K, v6 O- def followbutton(driver):
# t6 w) |$ h6 Q8 j$ _ - % Y: i& e/ O' k/ Z0 z" S
- try:7 }" l; k+ X9 s
- 3 P* k# L! \5 T8 k& m5 X/ D
- driver.switch_to_window(driver.window_handles[0])
$ J9 d; d; D; A6 s- W, {% J; r% y x7 U/ H - $ s/ D Q2 x$ m9 o
- points = driver.find_element_by_id("currentpoints").text1 W3 h: K9 j b, V5 f
% J* W. D1 \2 B7 |* y- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()
; G) g2 b) O4 b' L - 9 ~0 g8 K' T# D
- driver.switch_to_window(driver.window_handles[1])
0 I% W2 \& F6 V- o
& K& r p e% g Z* U: [- VideoSource = ''.join(driver.page_source.split())
; @% \2 k8 _0 K" t, Q8 g
: u/ Y: ^4 f3 _ H0 d0 W H- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:" F- P9 [7 z4 `' ?/ Q8 _' H5 o; r5 z' g# s
- . F( t* B+ A9 I5 z4 b5 a
- print VideoSource
& {# T y5 `% t, b }1 H% q) |
5 I, m# n n; u* @) v- driver.switch_to_window(driver.window_handles[0])
0 W! X8 f/ J j5 C - & n/ ^$ o" i; p
- print "Refresh..."8 j) W# a. `! C" r& v- l
- 7 W3 h8 r$ r9 I- U- a
- driver.get("https://youlikehits.com/youtubenew2.php"): m9 ]! j# }( U' }
- / I- ^/ C) |% `, Q4 i
- time.sleep(1)
/ Q+ h$ u" C, L" j. ?
* \7 K$ }) c) }- return points
! L6 y/ K i* Z4 q - " M" z0 D/ }, {+ K6 B9 C
- except Exception as e:
6 W& T% x; R; z/ R4 `: O/ |
2 e2 @' E3 r2 Q4 Q+ r- return 0% U' @1 d7 M5 ^# [$ j
, y* F R% y B, D- for i in range(0,5000):
: ^3 M" [7 k, P% k N& r2 o" X
, R. I* Q8 K2 ?1 p. c) \% Q5 i- try:* [* a. {6 J5 C3 l6 ]
- 0 w- _2 u( T0 X: u4 X9 `% }1 \
- captcha = checkcaptcha(driver)
0 Y& u: x0 F2 i" S1 y$ G" g9 o2 s
! N, J" A+ k( G$ T& a2 K& G8 f9 P- time.sleep(1)- p/ o2 I# B/ x5 ~1 j' r
7 g: w8 c# r C* K1 [1 {4 ~- checkRefresh(driver)
4 v" u, L. S* |) R" d9 J. k2 h1 j
* q6 P% B) A4 C# S6 p- points = followbutton(driver)8 w/ X) ?* ?; @
- / @0 \5 Z% ~* u- B3 |
- time.sleep(65)
8 a# ?' @) `3 l" v$ t3 R& y; J
( [9 l% p! k7 H- driver.switch_to_window(driver.window_handles[0])
% k8 v3 A5 [0 ~$ I1 ~% x
+ w8 K; n" s. b7 z+ e- tmpp = driver.find_element_by_id("currentpoints").text
- i+ ~! `- m+ i
H1 B& ^+ I- h. W0 h1 g- print "points: " + str(tmpp)$ n- E" I$ b0 u; @% ~7 S
- ! Y/ U7 l8 p2 o: D( f
- if points == tmpp:
. [& x- I' _$ |
0 x! u: t: I h: F- print "Refresh..."
$ w2 D7 l) G" b0 ^* u - $ i5 ?+ ?/ F& t9 @4 P, K0 Y" P* `6 q$ D
- driver.get("https://youlikehits.com/youtubenew2.php")1 T- N6 R" B0 c5 `- ?+ A
# i- }; T5 I( c, f- I- time.sleep(5)' f, Q& q; g# N( f
9 [' B$ |& N$ D- except Exception as e:
( G4 k* `# H/ w - 4 p' ^& }% U2 }2 p5 z; r0 N% w) w) O
- driver.get("https://youlikehits.com/youtubenew2.php")
C: s* M. |3 R- j - ' ]8 d# a2 L1 v, t: D% L. H
- print 'error: ' + str(e)
* i6 L( q6 X& ]4 H - $ c! [7 o! a. y, N
- driver.quit()
' [+ `$ ]: @# F) V7 Q1 q4 }
复制代码 * n- G& z k3 Z: G3 o0 M
) W9 l1 H# K% H
$ L; H6 W, M, C2 g, [ 因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。 5 b: _( N; e3 p) R" P1 _. X
* v6 u5 B3 R( X8 {) ]
|
评分
-
查看全部评分
|