|
|
本帖最后由 xiaoxue 于 2021-3-10 09:21 编辑 4 G" T: M h! r! n7 k
0 ~/ a0 m/ S+ l0 R! I
4 j* g+ F5 |6 `. I2 ]- e& o; Y, G
2 i$ Q3 m: k( ]& Q! s5 L- # -*- coding: utf-8 -*-
+ s! m. X% Y# o6 O% q% v- u1 v+ } - * N/ y, `" N9 D( p9 e# ~
- from aip import AipOcr' V( G# ^, a+ f6 L; U
+ c& P$ R9 U8 y& r- from selenium import webdriver
& H. v) [2 E1 f) F0 R$ ~) s2 a0 `, B
+ g$ t. X8 q# i- import time$ }. g( H* v D/ o- [
- % |2 i6 ^" b7 m( J Y+ e
- import random4 U9 w. z. A0 ~ C' H" m
- 6 Y- T; e4 L/ q: X
- import sys,re% ~7 V; `0 e; R$ `5 q/ d
- ' h/ O7 y: H: m4 d
- from PIL import Image, ImageDraw,ImageFont( O6 g6 }6 U5 M
' R' {, u( j+ D' @, m- """ 你的 APPID AK SK """
' v/ A' [/ c- }; }- P. a5 o7 E - 4 @2 y5 ]% ^/ ]3 y
- APP_ID = 'xxx'0 o+ X9 M" J% U" F8 s( n5 x
" x6 G8 E5 n2 c8 @- API_KEY = 'xxx'
3 t" [$ b# T4 ^+ p" d& ^& W - 2 N2 B3 v u& `# T5 ^, c0 S+ e% z
- SECRET_KEY = xxx'4 s m8 G* j/ H& W
- : t. B% x4 X8 E# B [
- client = AipOcr(APP_ID, API_KEY, SECRET_KEY)0 R- a8 A" X$ T2 H4 z# w# D& U
- 3 l9 o$ Y3 W/ m) R0 a* g" b
- #PROXY = "127.0.0.1:8118"$ I' u( {# q8 A
' ?8 D: X! Q0 K" C6 r2 F2 I- chrome_options = webdriver.ChromeOptions()- n/ Y* p' J: J0 r0 D n& D5 A
- 3 G3 D* y2 e6 U- w1 H2 d. [
- chrome_options.add_argument('--headless')+ w$ T* {5 ~* B/ w, l
' @$ J( |. s& B( s" D) V- chrome_options.add_argument('--disable-gpu')
- g6 M2 X& k4 f- _" {# O - * H% c+ i8 y& k" }/ T
- #chrome_options.add_argument('--proxy-server=%s' % PROXY)( s& C/ D4 G" c7 Q
4 G4 u: i2 |; n, v$ y* D$ U9 t9 x2 G- chrome_options.add_argument("--incognito")
) W% D1 W; ^8 ?4 B0 M8 L
# ?9 Y3 S5 Y1 v5 d- chrome_options.add_argument('--ignore-certificate-errors')2 L+ [/ b# P+ `, K; k
$ ~& @* `: J" v: U7 g' {- # Win
, C. S( O6 j- e- Q4 T
- ^* q8 Y" ~" J0 v4 \" l- # chrome_options.add_argument("--log-level=3")" T. @ D4 j' |5 K5 r, h$ t3 S9 I
- ! H1 Q1 o" C2 N5 Z
- # chrome_options.add_argument("--disable-logging")8 h2 @. T% d' s6 v$ e0 c5 d
- - X1 M P' T9 s' R6 o
- # chrome_options.add_argument("--disable-logging")8 E6 K2 S9 A* U" V" w
) k$ N0 L7 c! F4 Y- #chrome_options.add_argument('--no-sandbox')+ Y5 t8 x/ ^3 H
" o& v7 a8 l( f7 E7 R. k- """ 读取图片 """2 \# X+ o' q y
, l1 }2 W6 Y ~3 f, a- \5 M# Z' \- def get_file_content(filePath):
9 Y9 C$ A! {' D/ g5 H' t - 1 w+ O+ @$ s+ o- u( m
- with open(filePath, 'rb') as fp:
) Y) m& {- n+ H8 G) j
1 X8 r" S1 z5 d' H5 I/ a- return fp.read()2 h5 w" p% z u
/ e+ W! s! A) ^" g7 T2 x- driver = webdriver.Chrome('~/chromedriver',chrome_options=chrome_options)' E2 e% n' _ m% x6 \ M
4 A# E8 J: `: M8 {6 @* Q- driver.set_window_size(1280, 727)
: [! x' q; V& X3 ~' u - " Q" m+ u: P& P5 @% L8 k% E
- driver.get("https://youlikehits.com/")
3 p2 K/ Z1 H1 @' _( G8 s. K" I6 \
p5 M; l8 X" _. \: ?- time.sleep(5)
$ q2 \# k4 W* H8 p4 n - ' P/ l# z' A( x2 O
- driver.find_element_by_id("username").send_keys('11111') #user
# U! E1 B& J: ^# y7 K! Q
) d" T3 H4 \" H# U2 H" z% t- driver.find_element_by_id("password").send_keys('111111') #password
) @* I P. F2 n1 V4 j/ U - 2 ~$ W+ z1 k( G q
- driver.find_element_by_xpath("//input[@value='Login']").click()1 X, Z2 \! e' T6 b$ t# I, {( w
- . Z* D9 Y7 n4 T
- driver.get("https://youlikehits.com/youtubenew2.php")0 |: |1 K, T& }; K+ u% B1 e
/ I' X$ Z0 X$ _: S. O- time.sleep(1)
) u5 _! M) s S$ A5 m3 K - 8 h$ }$ P5 Y* {5 I
- #Try Again
7 B6 |% ?) p# L' u0 D7 i" \
1 X: M: p0 \% C0 K- def checkRefresh(driver):! m! H% N4 J0 |5 W" t+ a
- % B D# q) v* ~: [ N1 I0 B
- try:/ f$ R& a3 `, s) w+ B1 {$ J$ l
/ U3 P9 |+ |5 C7 C @3 q" E* O3 p- Refresh = driver.find_element_by_id('loadmore')$ I7 |* S' M+ t- n1 i2 w. D' z
( x! p. q; c! G7 g+ z9 s- Refresh.click()' C7 C% x* u; I d# N3 z' ^8 G! |) ~
- ; R" j7 ]4 w* a# q# @1 |' f8 \
- driver.set_window_size(1280, 727)
* G' k* m' g X$ \) x) ^0 ^ - " v% G; @2 x0 Y6 c/ }2 K/ B+ `
- except Exception as e:
0 @9 O& ^2 w5 U2 @6 l) ? - " d# ~) D. b2 `* m% t
- pass
7 N+ i3 t& d) w6 }* c - 9 ^, H% J0 S3 D$ X {. ~
- def checkcaptcha(driver):" a- e# m5 I: @# J
1 M# a3 z" Y" n$ ]9 R% ?& a% d- try:
5 C% B9 w) y* Q; c: s5 P
6 a t) x d" a& A7 B- captcha = driver.find_element_by_id('captcha') @! n. D2 U. h' w$ n% Q
4 D& G( t5 ^' v% D- print driver.get_window_size()" ?% k0 D# g" @" j- f k% j" _
- , s3 ~" K- i5 H
- time.sleep(2)
2 p6 I' s8 r4 ]* m' Y! c4 u - & ~7 H$ E; v- w" _
- driver.save_screenshot('/tmp/screenshot.png')
# m, f- P% }+ w" q0 p7 {# B" v - 5 ~- S9 \' T; l$ Y( A) z' ~
- im = Image.open('/tmp/screenshot.png')' ?* @3 g6 p6 K- |: ]# u4 b1 ]9 {+ {
- % l4 g* {/ s; K
- #取消headless模式
% Z# A( \ ~3 e8 c- m" M9 @' z2 | - ( _4 R% g$ X! t8 u
- #a = im.resize((1269, 610),Image.ANTIALIAS)
2 g" B- ]3 g+ H$ a. T
' m5 s$ ~; m% C( O: A- U ?' a* j) r-
( A% g9 J( t" B7 `
7 B) p7 {2 Y8 s- #开启headless模式
5 Q6 O. l, b7 s9 n. ^! f - 8 L3 C/ R* V* C: a1 w
- a = im.resize((1269, 727),Image.ANTIALIAS)# M8 `1 D4 l( E2 `# ], q# H
- ! J9 L! i) d1 V ]1 Z
- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")
5 w7 j2 r% J5 `. ~' [4 W7 b - $ L4 a% Z& n% Y) `9 [: ~
- left = element.location['x']
' M1 F2 K( B, `) \" d8 G- C4 v
- k+ t( S3 [; D7 D- top = element.location['y'], N+ m. [ _6 `/ X
* Y; d- `- ?2 l1 E- right = element.location['x'] + element.size['width']& x/ V2 R3 h. s. z1 {. U
w( W! \8 r, z+ v% v- bottom = element.location['y'] + element.size['height']; N N( K7 f' X) ^) i
- " f! Q0 g, j* c S" g$ e' S- Y
-
) E# q" e8 S; F/ T0 g4 f2 [ - : k* ~7 O! [; i) N# b1 l& f# E- P; e
- #element = driver.find_element_by_xpath("//div['#captcha']//img")2 f$ x* p" z0 D0 @4 b
- ( x* a# a, U! T2 u" X) |
- #driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']").get_attribute("src")$ m0 k0 @* J `- c+ K# S
4 |9 Z+ {" @$ d1 u7 p9 s$ `: _- element = driver.find_element_by_xpath("//div['#captcha']//img[@src='captchayt.php']")- t! p; m6 b- R, e( R3 T- W3 r
- A' \7 U0 S+ [1 G- a.crop((left, top, right, bottom)).save('/tmp/screenshot1.png')
# X) N; b* ?( M- j, | - ! ~0 m8 j6 u2 `7 O, G8 c
- image = get_file_content('/tmp/screenshot1.png')" _, w/ l3 x) ]9 P0 u3 j
- $ T. {' p x3 W4 c$ _) f2 c- [
- a = client.basicGeneral(image)6 S2 k$ k( }' n* T9 I `
) K% K5 \8 X! `: P0 G5 A9 O7 K- print a, V3 c& r+ y1 k% X6 Q
- ( M$ j- ?9 c4 U6 l. Y
- yzm = re.sub(r'\xd7',r'*',a['words_result'][0]['words'])
8 a, p+ ~! l1 Z- B; l1 m2 t
. Z; {. I. P7 h0 a0 e% _: R5 ]8 d- yzm = re.sub(r'\xf7',r'/',yzm)
. p" W Q1 ?2 [$ v* g/ C
6 ~0 Y5 T: n3 y. I6 {/ `7 u- Q4 K v! M- yzm = re.sub(r'x',r'*',yzm)
9 D; I8 k: M2 q5 c! V `7 P - ! _8 T, I& A5 z4 }" u
- yzm = re.sub(r'X',r'*',yzm)
5 k: w0 U! \( ~$ \4 t$ c
, K) |. l. L6 q- yzm = eval(yzm)
1 |& E8 F, q- x- g5 F, Q - + Y+ q1 J' G( J' O1 m2 g+ S1 G+ Q
- #yzm = eval(yzm.replace('x','*').replace('÷','/'))
& R; N9 I6 u2 X5 L1 I: E - / {; x9 Z/ r1 U8 v, N' a
- print '验证码: ' + str(yzm)
; L: u' x: R: S& D* p" f - ) Q) _4 r! Q) O0 T
- driver.find_element_by_name('answer').send_keys(yzm)/ J; B6 H+ h7 D" o! W/ y, `; A
- ' a$ k; |( Q/ W& l* C
- driver.find_element_by_name('submit').click()
5 U# g/ t# A( u: z1 \/ h - ( B$ J. F; |, A0 N4 K
- time.sleep(3); F$ u5 Y, O( q- R1 i
- [+ c3 c. P; v4 J' s. Y0 C- return 1
6 {) O9 L8 c; J$ i* |) B - 1 m8 | h5 K% _
- except Exception as e:9 e/ J( P+ r& X$ x. K
0 B( ^: L3 I, s3 z( V& r Q$ [ r- return 0) d2 p% G( E9 A3 ^, m
- + t; g) t+ y9 i4 K7 m" K' a
- def followbutton(driver):/ \: a8 j' t) N2 p- Z
- 8 H5 o5 P# K$ A/ v8 M
- try:! C: s8 B# N: Q$ V( h/ v6 _
, }. H5 Y" U. t% E# J3 ?- driver.switch_to_window(driver.window_handles[0])
! l# f( ]2 T, s! r' X$ d - " I/ ?: ?8 a+ h, q/ e4 i8 N- i
- points = driver.find_element_by_id("currentpoints").text
6 `; J! u G2 [/ V* k0 u( X - ! @& w( U2 F1 H+ [* V+ Z5 }
- driver.execute_script('return document.querySelector("a[class=followbutton]")').click()
3 g, J1 |4 @. P5 g+ W' m, } - ! s |0 o6 I2 y5 k4 A
- driver.switch_to_window(driver.window_handles[1]). z( K- [6 x$ h; X/ y5 D5 O& J
& C/ x: N5 w( o3 ]5 y. b- VideoSource = ''.join(driver.page_source.split())
! Z9 K( m( m; _3 D l
9 L. B: F, B7 G* g- if VideoSource.find("This") < 100 and VideoSource.find("This") >= 0:
- c' Q7 |3 O6 \' p: f+ X - + _2 k' q* B0 B, ]: A# A
- print VideoSource
$ A' @! K! h3 [! ^& M H" h - ( b* z6 q7 c3 @: ]1 Q8 k( f/ ]
- driver.switch_to_window(driver.window_handles[0])
( \$ l2 Y# \/ i2 [* \; _4 a/ D# }
/ W3 H: { _3 y% w- `/ s# ^. [2 |- print "Refresh..."7 B: [& N9 B) V
/ Q9 O2 f9 H6 c! n) I M- driver.get("https://youlikehits.com/youtubenew2.php")
6 U! ^! W% r% c
0 |; I4 ]$ a, Q6 L$ x- time.sleep(1)
: G* L, d- q$ u- k% A
1 d9 c8 [ p) d- return points1 v4 n0 h3 q4 y- ^* |5 P8 l
- l1 Y! q3 I1 W7 u0 H- except Exception as e:+ Q- J& p& Y! K4 I) i4 H" l8 t
- ! d5 u4 K( w2 s B9 D* i
- return 0
$ w/ F, w5 u0 B' ?$ W1 Y( Y
$ ^4 t6 S; C# Q, n- for i in range(0,5000):5 r& |" k, K: [2 z7 }
7 |: D! d3 D' V" \# \- try:
: q0 n, Z' ]8 ?
+ W. b. q) Q) b. A- captcha = checkcaptcha(driver)4 W4 G# L$ C7 x" t6 I M( s, k
& U" g( o; K: o, C- time.sleep(1)% n7 q* C3 j# |1 V
$ {- Y( t( y% F& l' T" X' F/ T& j# N- checkRefresh(driver)
6 g/ ?% o9 t' ? - 2 ?1 i$ w/ P9 u- w+ M! e
- points = followbutton(driver)
/ H% ?: X$ ?; P$ o8 L) Y - % E, x5 k8 R8 c/ R/ o3 B
- time.sleep(65)
( L5 r* k/ d9 K2 a. n) P# R
( u q/ q" \; G$ O# q- driver.switch_to_window(driver.window_handles[0])) X# y. a9 m8 O# W
- 1 j" F$ e. e6 f1 h* m; {
- tmpp = driver.find_element_by_id("currentpoints").text( ~* ]' o' g, Y# I1 U
- 0 a: R* l/ _8 m, P- L" L
- print "points: " + str(tmpp)
9 x' s( C5 g" t" n
7 _, ]* A% T4 J+ n& h$ m6 o# c" W- if points == tmpp:' D( P w1 T3 q5 |4 v j, F
; F3 V1 i- h2 s& t; j- print "Refresh..."
& v' a( ^4 b( y% k
5 I; f6 G+ I! C Q- driver.get("https://youlikehits.com/youtubenew2.php")" t( ?$ l! i& l" G* [; K" M
- - t0 h/ d/ o7 ]5 ^. y6 C
- time.sleep(5)
: X5 E" _! G/ U' x1 @1 x0 T" V - ' Y) l/ E8 @$ `5 v9 x
- except Exception as e:
' e$ ~! s# I+ F& S- D* z- k3 ~
% e1 M6 t2 Q) U9 w- driver.get("https://youlikehits.com/youtubenew2.php")
) R4 s6 P% O! n9 z0 |" b
, n: U! j* C5 }7 h- print 'error: ' + str(e)
3 c6 t& V) P" E, Q
1 b4 i0 H) w- h! Y! ]' L' C `- driver.quit()
: L9 m; s+ T [. j4 h' ]
复制代码 & r3 O- v1 m5 p
: o% d. K! }9 `6 }7 K2 O, Z/ u$ X
因为headless ,可以挂在vps上跑。。 百度识别验证码正确率还是满高的。
( o: i, A! ~3 t9 |: p4 `
; _7 B. N$ Q0 _5 `: n6 G |
评分
-
查看全部评分
|