|
|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑
6 ?8 t, \0 H/ ? a; L5 b" b0 }# q4 Y8 U @, I
; b# i8 C; g* j2 e% g1 J
- , r; l2 w) U8 j( V6 }9 Y+ N
- # -*- coding: utf-8 -*-
+ U r( c/ T/ u7 v% L Q - , ?8 L5 b9 u6 ?- z- f
- from aip import AipOcr
" T; u" d. b3 b9 e
/ V* \% L- M4 d- from selenium import webdriver8 k$ W# K/ j+ z0 i X$ k
$ a* ^, P9 v+ [+ u) W6 ^- import time
; x* U! E- Z7 ^! k6 Q) { - , ?6 n) y& w8 Q' z$ Z
- import random
$ u0 c2 h) R/ o" V$ D' l B - # ~+ }/ ]6 G% s
- import sys,re, G) f* }6 t) \5 m0 u
- 2 ?! B" X& f- {6 l% ^$ B7 s
- from PIL import Image, ImageDraw,ImageFont. c; ]* M* |4 x- c
1 R7 ]( F, [* a- """ 你的 APPID AK SK """9 g, Q" g$ o" f8 s- s: |0 a
1 }# b- h8 x) J" s3 W- APP_ID = 'xxx'
8 X! [! ~2 O) `, ~+ E2 E - 3 y8 k; s3 Z$ v( e% i$ B2 H; j
- API_KEY = 'xxx'
# V9 h5 h1 W: b" q \" L* s. n. r - * j7 O* H8 Z( D4 \! P1 Y
- SECRET_KEY = xxx'% I* |5 `8 Q1 Y* b7 r( t/ V! D
- * [8 l4 X! k8 h: o
- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
6 ?& Z" T4 d X& e/ N2 z
; G0 r; X! G6 g7 a7 a6 N- #PROXY = "127.0.0.1:8118") H: X I O2 ]' O
- : f+ v/ j& f5 I0 b
- chrome_options = webdriver.ChromeOptions()2 Q. G2 Q! o1 c6 k
" W. d/ \/ j3 H; _! ]1 e/ B- chrome_options.add_argument('--headless')9 |* Z# H" Q W0 M( X
- 2 x, x& R+ u+ M3 q6 j
- chrome_options.add_argument('--disable-gpu')
( I" l4 t8 Y! Z/ V9 N" Z" E$ s
! ^- | P& }, Q8 I) X- #chrome_options.add_argument('--proxy-server=%s' % PROXY)5 _& H5 i/ N4 b% o$ i$ u6 P) {
( T0 ?# r$ B% b3 v1 X, M- chrome_options.add_argument("--incognito"): V# V/ v' i# E
6 b- z# ]$ Z4 D% V _- chrome_options.add_argument('--ignore-certificate-errors')
: J, g1 a \. j7 b - 0 f' J4 h, Z/ i8 B% B: {
- # Win" f1 _( R4 Z7 _1 a9 [
& I" ^0 v, G: ^, O" x+ \- # chrome_options.add_argument("--log-level=3"). T7 ]/ g# W( l3 C/ B6 V$ k
- / U) k1 n' K0 s& Y* a7 ~
- # chrome_options.add_argument("--disable-logging"): u5 Z0 Y- }# r5 s1 Y
- ' F( v2 m- @3 x" v
- # chrome_options.add_argument("--disable-logging")
6 ~6 q5 X }% z) b: ^3 \. m
; I! U$ E6 h* h9 n; o- #chrome_options.add_argument('--no-sandbox')
9 | s6 B i8 y) g" C! Z0 d3 { - $ ~ H; ?: W0 r- i
- """ 读取图片 """
% c. |* o, ]4 K$ ~
; m8 F8 B, M" h" S2 d- def get_file_content(filePath): ^0 n* q, N% r2 I+ ~
- . v1 C6 B/ b9 q/ d- V8 E
- with open(filePath, 'rb') as fp: B" o6 n0 j8 Y4 w/ P
- ) |* t9 N% v/ s: g! k! O# Q6 ^5 O8 L
- return fp.read()1 q9 P; w: E, e! E) }4 {8 Y
4 Y. W4 G8 v- f0 | r- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)% z# U$ O4 {9 ]: Q& ]: ?5 s
- 5 n7 l* F( T; c1 ?: F: [
- driver.set_window_size(1280, 727)5 t5 Z! u# v* x4 b w7 `9 s
- ) I7 }5 m) A# S! B# l6 ^5 o
- driver.get("https://youlikehits.com/")
+ ^) t+ F" D4 x' g* j
) { C& O+ E, Z/ |5 t* V" C. Y- time.sleep(5)
8 C/ _0 I$ s+ S }: j4 w: d - 8 Q2 D( ?% k9 \0 k( y
- driver.find_element_by_id("username").send_keys('11111') #user2 r a& J) F7 G1 G+ _/ ?- ?7 R5 k
- 7 C) T- n7 o A5 Q3 I
- driver.find_element_by_id("password").send_keys('111111') #password8 q/ M' I; q C
6 }# c5 ~$ [, M& [% a- driver.find_element_by_xpath("//input[@value='Login']").click()4 k" l2 r+ N. x" n+ m7 V. |& v
- 9 {' ?1 h: b% ]7 z' h
- driver.get("https://youlikehits.com/youtubenew2.php")
0 {* B5 h; b" S( h& M - 0 F8 O2 T4 c- A7 u- W# V9 q
- time.sleep(1)
3 b* E0 x1 S$ P; X0 _
% K( c8 d" D" N& ^3 Z. i$ ^+ f- B/ N- #Try Again
$ c% X/ E% c9 n& G, R& y. T - " M0 c, S2 N- i0 y/ k! L
- def checkRefresh(driver): k6 A! K7 ?# v u* T& j
- / _& h% b& B$ I/ o% ^# i
- try:
2 Z; U% [; x% s; B - . b/ d& e0 m/ J2 I) d6 u
- Refresh = driver.find_element_by_id('loadmore'): q+ `: l1 R7 o1 S6 ^
/ b4 r: _8 ^) t% n) f6 b/ g% \- Refresh.click()
8 A" n; c k* m/ X6 E
; m. E H8 t% y9 H" p6 R9 ]- driver.set_window_size(1280, 727)3 X, T c! e2 f
- 1 K4 T3 |8 R% \5 W
- except Exception as e:8 L1 |* ~0 v9 s6 v
- 1 j5 `" J6 T3 k; A# w! g
- pass
1 K* W; U3 Q& `
R- h) o& C; ~1 q9 J4 k5 u- def checkcaptcha(driver):- d9 `% p, m E
+ R( h5 U O- e, w% c4 h- try:5 E! d6 y' Q, v
- : z r' e- \8 ^3 N3 e
- captcha = driver.find_element_by_id('captcha')' E! x2 `! I/ M' t; c5 n' v% H0 e2 z
- 1 I% U, T6 e) }" r0 M; ~
- print driver.get_window_size()
& X# ]/ g. `5 n
. n X+ `; U3 V( c' ? P$ b0 f" {- time.sleep(2)
+ j% w; \ [( k) V
7 o- i# E1 w) F. G" J- driver.save_screenshot('/tmp/screenshot.png')
]& R% w7 |0 Q8 S" [, H
# R) e5 q' v( j. Q+ f9 X5 S0 O, e- im = Image.open('/tmp/screenshot.png')" x; l+ f* k7 ?; i. X9 {6 }
5 D& N, S( Y# s4 \. l- #取消headless模式
6 \/ O- p; q2 @# U* t' q - % Q/ u1 p# P3 q7 F; a0 a
- #a = im.resize((1269, 610),Image.ANTIALIAS)+ e, j# r7 [) \- ^) K+ `) q
# e$ J. U& H- y6 W* S-
5 A \3 ?- b3 u7 Y' L ~3 K - , K8 Z0 q" P, X2 ^, Q; [6 G G3 M+ d
- #开启headless模式
: c* m' E3 c" U0 w' p/ b9 D. _ - ' i Y% `" g* M$ R6 _! b
- a = im.resize((1269, 727),Image.ANTIALIAS)
+ P+ x, q4 _2 \7 I5 T& R8 q - $ G* b9 h1 Q. f/ w3 V5 [: G2 B
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")1 s+ J% f* Y( L& u- a
; H6 y. X: V- t; ]% @. p9 @/ p5 b, h- left = element.location['x']7 l3 \. o# S1 N# U. ~0 g5 z# R% Z
- ) Y( o2 g) Y- Q
- top = element.location['y']) _8 U3 z) T! O2 ~
- 9 T# Y) L8 R! R" \8 v1 M
- right = element.location['x'] + element.size['width'] @* V4 l) E9 y9 q' l
" V, W0 Q5 f6 c+ { R3 t2 q- bottom = element.location['y'] + element.size['height']
6 T( S1 X4 ]5 J Z' X- L% d3 } - ) l4 h3 z3 }% d, z. t3 g
- 2 I+ n" R8 |: Q1 N! z
- ' z. F* N0 f' o* H' r! z; E
- #element = driver.find_element_by_xpath("//div['#captcha']//img")1 t" M" b+ W: \7 F3 }9 @9 O; S6 p$ z
7 j1 L. Q# U: W% e2 B- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")
& B' H8 P& r3 d; _& t* ]9 L! w - ) Q+ _2 s* I, c% Z
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
0 E( y: _. K1 l* b& V2 g: z
, ^# q" R6 x! Y7 i( y3 l2 @- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')- Y" |8 Y% b4 P+ S9 e' d
! u1 G4 \$ z3 k- image = get_file_content('/tmp/screenshot1.png')
o1 i7 W) k% o A
7 t$ B& | t5 R5 G# O+ S- a = client.basicGeneral(image)# ~: k, Z% ?* \5 V
- - Z0 j7 [# c& q- d4 n* o- F. B
- print a. p3 S! v$ N S. T% @$ ]
- ]1 p2 H. F8 y$ C% E- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words']): _3 U9 ]1 g4 p6 \; Z
- ) n# K& x+ Z4 D. Y! n4 F% d
- yzm = re.sub(r'\xf7',r'/',yzm)& m* a0 u# l c+ S+ \- l
6 d% }, N2 P, Y, J8 h- yzm = re.sub(r'x',r'*',yzm)
. Y1 I' e: v3 W' t, ]7 Y7 z/ R+ I0 x
4 ~! G/ |" c2 X- yzm = re.sub(r'X',r'*',yzm)7 U; X. d `2 e# T' w c' h
- % _" O; Z- j5 h& C- \
- yzm = eval(yzm)
: m+ b k4 ]% e) R - , s: Q+ J0 r. V1 ?9 w
- #yzm = eval(yzm.replace('x','*').replace('÷','/'))3 i! U$ a8 @" U% k9 _
- 1 I, I9 U/ K6 O) v6 J! i, |
- print '验证码: ' + str(yzm)
4 T+ `; A/ i( K. T0 t" j - 1 r# a% N) G5 H w& U8 m" Q
- driver.find_element_by_name('answer').send_keys(yzm)
^! |2 u7 v0 e& \% B9 Y0 u
' f! y/ \- u! B" I4 v5 M- driver.find_element_by_name('submit').click()
+ B Q7 J/ H$ z3 {2 i8 J - 8 ?( y3 B- J {) i/ A% p! P
- time.sleep(3)9 z3 X/ ^: G% y
- ! q* V# L2 [$ d& }9 O1 M
- return 1! D! F, d- u) ~6 r3 C3 m
( N( M! F7 h* a1 }4 l' e* l- except Exception as e:* F; y# O5 U. T3 |( r. O" y& r1 u
- ! e. @$ o0 z; @# ~' I; M+ ^
- return 0% {$ \6 L: F( |% Z0 a2 e# X0 x
- : ^* n: r* p( k
- def followbutton(driver):9 D9 Y8 v! C9 Z. A
, ?( e/ S! {, s2 W& @- try:6 y8 G+ v; t& c2 L
8 Z+ i# _0 ^6 a- driver.switch_to_window(driver.window_handles[0])
4 q- j' T6 L6 ]4 g& g7 |
d, ^, I; ?' X8 n- points = driver.find_element_by_id("currentpoints").text
' n, z$ {& K. T: Z3 j0 q0 | - . w N N! a, C C5 ^0 {
- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()
0 G' c+ @- W6 E9 R3 l8 Z& X) H - ) z a) E0 r& N6 r" b
- driver.switch_to_window(driver.window_handles[1])2 X, Z7 X. w, l- R3 x) R# A' B8 z7 Q
# f# i7 n F. N) w$ {' @ h- VideoSource = ''.join(driver.page_source.split())5 c/ |2 ^/ y! J- M: r- p9 v! E7 Q
N) \3 ~, M8 c" z; d, D: b- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:
" R0 F) P( Q& b- }- ?7 D
9 k6 n9 i2 X4 A7 k" R% \- print VideoSource* k8 _3 d: t% d1 t! ?
& m$ d7 B: k5 \- driver.switch_to_window(driver.window_handles[0])4 u* Y, s: Y* l5 ? Y
- 4 Y- d8 @) u; e, ]3 b3 c3 Q
- print "Refresh..."
# h" y, L- }/ [: F
. O( x" v% S2 Q4 F3 p1 q- driver.get("https://youlikehits.com/youtubenew2.php")
7 p& `: u) @# A - , P7 ]% x! C. V4 ]
- time.sleep(1)
8 |8 H) A5 g$ Z. h8 ~- S - 0 Y5 C: K( r. U
- return points
; l7 E% L9 P6 V4 c' Q- T, A! h
: I. M- [* ]9 {, Y" n1 C- except Exception as e:7 ?+ [7 ^% H- N
* A: \6 F/ U& m+ \4 Z- return 0
' c/ H' F2 O- ?7 M
' b0 ~8 T: ~! z- Q \" k3 u1 G- for i in range(0,5000):
; Q5 ?5 v" T# @& Y - * }) E2 x8 J4 y. ^ K6 C F' b" ^
- try:
) p1 F1 ^% w' W. M4 R: h - ) J0 C7 J. q4 K9 F
- captcha = checkcaptcha(driver)3 T7 ^9 A) r) Y) Z& ~5 X( q* r
- % J* g+ D( l: E! `2 b" s
- time.sleep(1). Z% h. x: h( m- H1 d
- & d- k. O$ G1 |* R, C/ @
- checkRefresh(driver)# e$ J1 A$ [5 O% y w
- 1 e9 t2 E8 C) s. q$ ~1 b1 w# o
- points = followbutton(driver)& p5 x* w- |# J" a k" ~( d
- _9 c7 J r; a
- time.sleep(65)
& Y5 l" \0 x! ~4 g. G, }/ j - . r* M p" c4 B# T3 q
- driver.switch_to_window(driver.window_handles[0]): f) m- t+ } }2 E8 {) S: k
5 I: ]$ h1 G4 I, x1 c0 |) W- tmpp = driver.find_element_by_id("currentpoints").text
( t. U/ g+ }* M - 7 y V9 w) j- E
- print "points: " + str(tmpp)5 ?0 @) o/ r5 _. F; O
- f* ]$ a2 | O. T% O
- if points == tmpp:
( Z( T6 V5 _4 [4 @* i4 I9 R
" E! a5 Y* m# C5 e- print "Refresh..."
/ k6 m5 z2 i' u1 F
) V* j% M- ?3 i- |7 ]+ W& @- driver.get("https://youlikehits.com/youtubenew2.php")
7 \1 U8 W5 y4 {# n4 o. r) ^ - ! p+ X: D9 J0 I3 s4 w
- time.sleep(5)1 R: P5 r5 J+ v$ w1 u/ Y
8 j3 M- {, a5 ^( k- except Exception as e:& R9 W& t5 h* P& n
- ; A% k0 Z6 P$ i( }* i, U$ F7 Q
- driver.get("https://youlikehits.com/youtubenew2.php")
" y' W' T: Z2 u# r
# a8 s/ D+ i& _; b8 O- print 'error: ' + str(e)
9 N. ?. C+ S' b, o* {" C. _ B - 5 d# _& A/ A( X# [3 I6 q7 ~# X8 g! h
- driver.quit(): c, x& h7 p' D H
复制代码 ; I8 d9 c* H, s7 z$ A
+ y, t5 K0 v5 Y% v% v* g
* m7 ^ }5 k+ _: o! J1 P
因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。 4 Z% c0 Q4 d/ D0 n0 \
8 F8 e/ Z& C. O2 J$ R0 ~ |
评分
-
查看全部评分
|