|
|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑 ' E& h/ ?" v, _+ y6 {6 F. a9 o
$ k0 s0 y! m: V- K/ h, x+ }7 {& S/ t" P4 s. s. T5 Y3 p
" C8 o1 n5 j- u9 I" h- # -*- coding: utf-8 -*-
1 h7 J' n. _* n" b7 L
4 J% h) B- n/ m/ s5 S% f- from aip import AipOcr4 w2 ]5 \. k ?) v! r+ f8 N
$ d' I* `+ E1 ?! U1 @- r. b& k- from selenium import webdriver: @1 \! y1 I( o- @
- : V2 R- x! r, Y4 q2 q, l, ~
- import time1 q- M7 S; Q ~- t1 [+ o+ {
- & z, u2 w8 r% X$ n, \, O8 [! t, z- [
- import random- r: d, J0 e6 D6 m0 \' W
- 0 S- d2 A- H9 t% g8 h0 K
- import sys,re' Z1 K4 W& q. B$ i7 [' D# X! }, i7 O4 c9 p
- 3 n/ @ i% p( h/ T
- from PIL import Image, ImageDraw,ImageFont
, W0 s% h# u! l( p! a
& K. T x% |4 R* `# e6 q5 Y( o) N- """ 你的 APPID AK SK """
/ K' l; W6 P. F+ ]
! E4 s* t! h) j- APP_ID = 'xxx'4 K7 m5 m# d' z* E
- % l+ p1 S: {6 H
- API_KEY = 'xxx'3 ?2 _, g) @; k- ?) `6 w
- 1 ? ^9 C+ B$ u$ ]+ X S
- SECRET_KEY = xxx'
. m0 e2 S- B! I t5 ?8 L+ c2 { - 6 S" K6 r- u6 ]" L1 L- J
- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)) }' }8 U5 I8 o M `8 s. u
- 0 k& [1 Y3 w' R0 n9 o- G
- #PROXY = "127.0.0.1:8118". m5 ~. j. z) |' g
9 O6 j9 |0 N/ A) x& c- chrome_options = webdriver.ChromeOptions()
6 L- Y7 \8 S+ ^ L0 f3 I0 s' m - \* b- {: v6 m+ g6 [8 k* F2 \
- chrome_options.add_argument('--headless')
, d4 b s2 I, m# j
. S) Q; j; {9 H, I" q- chrome_options.add_argument('--disable-gpu')
. k8 j* o+ M3 a& b; v# a
% h3 x( X: P! Q4 Y! \' T$ k- #chrome_options.add_argument('--proxy-server=%s' % PROXY), X: |, }2 }" i; {0 w7 s# Z
8 K0 w* A9 ^$ D a8 D, h9 |- chrome_options.add_argument("--incognito")+ b# X( M3 s0 F- A% G# {
9 S2 C. D5 t5 t3 L- chrome_options.add_argument('--ignore-certificate-errors')( |* O- D. N, d G7 u
- 0 x! o3 L. V0 o; q
- # Win8 `% l! |, y. p/ t- z8 S
- $ }8 |# C# {' O! n+ z3 c4 ]
- # chrome_options.add_argument("--log-level=3")
4 K& _) p* ^3 K' e# S/ u7 K
# T, K. z1 X) Q! W3 T& Q! F( u( U- # chrome_options.add_argument("--disable-logging")( O) P4 w/ {1 W+ t6 o y. U& p0 `
- 1 F- z/ P4 b9 _7 ^: p$ r/ Y, [
- # chrome_options.add_argument("--disable-logging")+ v( J; E) r* Q4 ]. W% k3 G) V
- $ [) K; N2 F) H. u% b
- #chrome_options.add_argument('--no-sandbox')
7 t6 g3 b! g) R! e7 o( x - 7 j2 w+ Y. f8 W' d% a
- """ 读取图片 """
! }6 Z$ R/ {3 A0 T5 f. |3 Z
# y; c/ a7 s- ?2 b( l* w3 Z2 |* @- def get_file_content(filePath):
: C4 h) g4 l: y' d
* Z' j# }, x/ y- s- a# n7 B# z- with open(filePath, 'rb') as fp:
5 c, ^' b9 d {: ?7 ]
; h) F v* h# w! f- return fp.read()
5 |3 y7 B% Y: R1 [2 A. E$ Z/ \
b% N( S2 `+ o, o$ S- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)/ P) y! \5 U% L" a; `. F
/ U1 U" W+ |5 A: [7 _- driver.set_window_size(1280, 727)4 u* {# g- h7 t$ Y9 Y9 m. m, a
7 Q3 u/ j/ G- H- driver.get("https://youlikehits.com/")
0 j- Z# e7 M& N7 g% k' {
' m; `% t- U' g! f2 O/ @- time.sleep(5)
0 t# c: X4 I5 S! ~
0 ]3 o- N1 F+ g' p+ n- driver.find_element_by_id("username").send_keys('11111') #user, C* I2 G/ b2 {7 C% Q' s, a
- ' V7 p$ ]/ M1 [* Q, T
- driver.find_element_by_id("password").send_keys('111111') #password. {! @- g2 ~+ j) i
- }5 @4 l* F+ _" a+ {* ?0 c! \3 y) [- driver.find_element_by_xpath("//input[@value='Login']").click()
$ b5 S1 k U/ i6 P. ]5 y
, m+ n0 Z# W! K4 I* _- driver.get("https://youlikehits.com/youtubenew2.php")& _+ k/ U4 \; ?, r, X
a2 r- n: ]: d- ~4 U {- time.sleep(1)
- W; n) e/ q3 U' [" I4 B - & u5 [: U. h s5 } b
- #Try Again
( d1 w9 P2 A, Z. G! z) q
/ k t. L. V0 Y/ l1 T% R- def checkRefresh(driver):/ Y- Y+ u* Y" g# \ z+ Y- \1 q
- ! ^5 w ?/ ? M% Y8 @3 ?
- try:0 x. D& N+ c8 n0 i$ L& P6 j
$ C; I! W) h5 J- Refresh = driver.find_element_by_id('loadmore')
5 H6 z/ }0 l& T! Q
r# J. X) j& G) P- Refresh.click()
- ?# i4 g% R5 }6 I3 i
7 H$ _9 k6 Q/ [. w! g1 U- driver.set_window_size(1280, 727)+ A! Q. _$ y& \1 d# c$ U
1 f. j6 w! d+ r5 z2 ^- except Exception as e:
# M/ w* D) O" N9 J N5 A; j6 Y1 v
% X+ G y/ R$ @* F( Y- pass' l5 T7 p' g- }$ S h( [* ]. | Q
3 D- ?9 w' ~ U7 k' F- def checkcaptcha(driver):
' O* ^ s$ N" n2 r& B - % y8 t+ f7 W! {# G, C
- try:
' y: k. U5 x. i# e+ z1 R4 j) @" U - 2 |! `. @0 z; `' m
- captcha = driver.find_element_by_id('captcha')5 }# x; d+ i; p; g: d/ v& `
$ `% t) I/ P0 g+ Z$ \7 O- print driver.get_window_size()* P4 ^6 j. S1 E+ n2 s+ r% N
- , `! C, W5 c0 M
- time.sleep(2)0 R6 ]- L) l. [9 \) c5 x
- 2 k! _% t9 n) e {
- driver.save_screenshot('/tmp/screenshot.png')
7 f# {: R$ B; Q1 h/ [
, A' J4 I' X7 p9 N0 o1 N ^1 P9 r) K- im = Image.open('/tmp/screenshot.png')8 ^: ^# l2 f2 I9 t. E0 b( n% ^
% z- C5 r2 Z' z, i$ ^! R) s- #取消headless模式
A) L; b! X3 R* d, D, y2 `7 f - 6 F" j; X' |# z+ H# ]1 i) F9 p
- #a = im.resize((1269, 610),Image.ANTIALIAS)
" V' i, J$ x3 m+ _& ~$ ] - ' z( Y7 q6 s& i
-
7 r4 \: |3 G7 c' k - $ X5 x) ~. u5 {9 u3 `
- #开启headless模式9 A0 Z7 A7 a% o* B" C* Z
5 u$ m4 S9 ~; V# |4 }6 z- a = im.resize((1269, 727),Image.ANTIALIAS)* A2 t0 S5 d% d9 g- U2 r" ^
- , I9 d1 o! g, I" G# T) W0 w
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")5 W" M% L: K0 p- o$ F$ X% r7 Z
% e# |& O! i1 \3 N0 T1 F- left = element.location['x']
% B1 A+ i4 Y/ Z* [' a' v7 q
/ f+ ^8 }/ a. x5 X/ K" y- top = element.location['y']
6 k& v% O) k) ?% q - / V3 N. H; U* W* s
- right = element.location['x'] + element.size['width']
! J7 B6 @. v' Y8 v! {7 C( G# g X - v5 A! E; V# m: K- Z5 _
- bottom = element.location['y'] + element.size['height']
; D& h1 z L$ E7 \ - 7 x6 r& ?9 B4 N
-
( U5 C. O" B3 T - $ v; v- J1 D; F a4 Y* A' O
- #element = driver.find_element_by_xpath("//div['#captcha']//img")
% k1 c1 k+ i2 w" a
$ X0 Z$ l% |3 E% f- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")
: g$ c, \, ~& z( v! a
; u& @$ ~# q# ^' e; l- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
4 b$ v: U1 v* W. q O - ; ?! `4 \- z- b. d( N; P
- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')/ D; ]! w z" x$ o
. i0 n1 I1 N: U3 b- image = get_file_content('/tmp/screenshot1.png')
, J+ H5 R6 O. ^" d6 [- e* b" @
& n& Q3 C7 }+ A6 m: d- a = client.basicGeneral(image)7 |$ \: I! m: N/ ]. J
- 9 E# q! U% h S0 Q! n6 a4 w; E$ D
- print a9 S' }) x, \# M: B Z# e6 x" ^* m
- ' K: ~( M& t j, I
- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words'])
9 k+ a6 w* a1 l6 R! R/ \
/ O$ ^0 c0 z% L8 K* [+ u" q- yzm = re.sub(r'\xf7',r'/',yzm)1 ^) f% m, T( v* \% d
& M: y7 O9 |# s4 ^0 B- yzm = re.sub(r'x',r'*',yzm)6 ~1 z' n( t& [8 s: ~. O
- ! z+ K- H4 \" W; b0 _9 `1 k3 [ r
- yzm = re.sub(r'X',r'*',yzm)0 d, W2 E* ?! j" s) Z) v' T: o
- ' \$ z* `0 r8 Q
- yzm = eval(yzm)
1 h% M" c5 A# m0 ~3 k. ] - 4 t& I& t0 G% ?( x5 y* L: X! D, O
- #yzm = eval(yzm.replace('x','*').replace('÷','/'))5 F, e. }; k8 l1 J! a
- 4 k' X v: A4 Q% d/ d' L. t9 u* c
- print '验证码: ' + str(yzm)
% |/ n7 A( q; M7 E" O5 L/ q
. M& S5 n' O; `2 ?3 T3 ~3 [$ X, _- driver.find_element_by_name('answer').send_keys(yzm)
- A/ G8 `. ?2 p+ D7 o
! u! i/ x+ V% p y D7 [: R- driver.find_element_by_name('submit').click()
+ Q, B$ ^; V* N/ j, k# i
}% D: Q8 g, k1 ~, i- time.sleep(3)
* l* k' l6 f& q - * d- }' C2 @7 j! O
- return 1; `" G- K- m5 |3 ]: J% L
- 7 \1 {; K U y' Q4 q# d+ U& E7 d! T
- except Exception as e:
- N7 c8 d/ |! M7 G3 Z3 n
. Q2 j! A7 u f0 y! @9 k; O# L- return 0
0 c7 Z% @ u# Q+ i - 3 P R G& \! ~* ]+ X' d u0 O) \
- def followbutton(driver): h, [/ m/ r! x/ b7 ]0 e
- 6 U( N$ y8 d- Z' J9 `# S$ E w
- try:0 @3 k% x+ E% i
- $ s- m1 |* U( b. h
- driver.switch_to_window(driver.window_handles[0])
$ w* [# a: a$ R6 z( @1 O5 d5 E/ y
' y3 v/ ?* L9 r- points = driver.find_element_by_id("currentpoints").text
- {9 q. F6 N) }, C+ Z. p- H* Z - 3 n b. T% c8 ?9 S
- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()' H4 ~* \; w1 o
/ O) `$ l: {: y/ w- driver.switch_to_window(driver.window_handles[1]): `4 | w; u1 \4 [$ X" L) F1 X
/ c' m9 U5 n0 f: K- VideoSource = ''.join(driver.page_source.split())
+ z, G+ h# T0 b, o6 J
# ^( c6 P8 k: @! v* z3 t/ F0 @- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:
4 K" T0 V- X( u& T! `, g - 8 }8 K, b0 ~) f/ B9 ]$ x8 t
- print VideoSource( E p3 B! ?$ x# ^1 n! [
( J) y2 q4 \0 G9 i7 s3 ~# z- driver.switch_to_window(driver.window_handles[0])
6 F I% ?) M8 f! H
$ q2 G: v: {' Q; [# \2 h8 e4 {- print "Refresh..."
) f; i' G. |2 N; H9 d, k& Q9 L( a - 0 R) f0 c0 P8 h* _( I# C
- driver.get("https://youlikehits.com/youtubenew2.php")7 h& t; b: E. v7 v- Y! B
8 ]8 f7 n& q Q6 ]. c& l( s& [( d- time.sleep(1)
4 C- e" k. v5 D% d - 4 [2 e: h- q J5 l
- return points
; {" T+ m; C- M9 V, j0 Y - 0 l! V e* i" _" ?/ S0 b
- except Exception as e:
/ g* G, B C0 `5 h4 V
7 g% k* \# L. w& m/ D7 b- return 0
# {" y* `8 T; T: e/ t4 \( T, M - " ]1 N; ~. @6 I a: j4 L
- for i in range(0,5000):* {) }, w% i9 X; k
8 L9 ?7 A6 r! Q) i# I" \( u8 e- try:
" b: t9 k) k% `: {: r( [$ F
8 J9 D6 U5 G/ P, F- captcha = checkcaptcha(driver)
+ L- F5 c' k, M* S% N' d - - @& l/ M; J* i7 C+ L) D6 V, H! k# v
- time.sleep(1)
3 y$ F! j$ K9 g+ Z - 1 ^/ F' }7 G# X. o( W$ b# p
- checkRefresh(driver)
: i' t; G8 Q# \! { - + V ^+ @. K/ X+ |# C: C: Q& i3 s
- points = followbutton(driver)9 y8 j& ?& T1 w" O
- $ a& M+ o1 X+ W, d9 ~. F* z1 \3 Y2 N5 r
- time.sleep(65)
8 L, O G [$ S& C7 I) i J - 8 x4 b1 W2 ?4 L! H, s5 u
- driver.switch_to_window(driver.window_handles[0])
" T; i* R) I! d4 Q& z2 m, n+ |
! ^8 Q6 C! R" q- tmpp = driver.find_element_by_id("currentpoints").text; v3 V* Z' E" C+ c* }* G5 o6 o) H
" }$ {0 M2 {# ^9 X- print "points: " + str(tmpp)
! ?( e; Z1 h: P! B7 m; j/ M- S* `
1 x/ P+ ~$ ~/ O- if points == tmpp:& W6 K& [) l* D8 H9 r
- 5 u' }" _, o( o$ R7 A1 F }
- print "Refresh..."
, |7 F4 T& ^9 p; L# |
. I( U! H b `& b8 y# W% l- driver.get("https://youlikehits.com/youtubenew2.php") k4 w. h/ N* z, x* h$ K6 e! q
9 y5 s. g. v5 Y. B% v- time.sleep(5)
' g! W2 {0 c* | - # |' l* j0 D; ], V" ]! x/ i
- except Exception as e:
/ r. L9 P7 y. e5 j- @. u
+ y2 \% ?: A2 N9 i- _- driver.get("https://youlikehits.com/youtubenew2.php")
- q" O0 G2 \0 I- m# b: K- j
/ E; m* V& }. L* z- print 'error: ' + str(e)& Y0 o3 u( Q1 w: c+ l) b! B
- . E+ Q) K& c) O6 D
- driver.quit()
1 I2 C4 `3 R. X4 r9 x0 p4 I
复制代码
: Q% u# U5 l3 R
( L0 a8 g* f1 `8 C; J0 e, Y) {; T3 p5 X [
因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。
( U# w. g8 x/ |! Y3 b" c) ~3 J
1 {$ b3 |, p2 K0 B: [, L$ @( B |
评分
-
查看全部评分
|