1. 程式人生 > >python selenium接入打碼平臺破解豆瓣驗證碼登入

python selenium接入打碼平臺破解豆瓣驗證碼登入

from selenium import webdriver
import requests
import time
import re
from chaojiying import Chaojiying_Client
from selenium.common.exceptions import NoSuchElementException

url='https://accounts.douban.com/login?alias=&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1001'


def login(url):

option = webdriver.ChromeOptions()
option.add_argument('disable-infobars') # 關閉自動化程式執行的提示
# option.add_argument('--headless') #隱藏瀏覽器視窗
driver = webdriver.Chrome(options=option)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0'}
driver.get(url)
# 定位賬戶密碼的輸入框,並輸入賬號密碼
username=driver.find_element_by_name('form_email')
username.send_keys('賬戶')
password=driver.find_element_by_name('form_password')
password.send_keys('密碼')
#豆瓣登入時,一開始時沒有驗證碼登入的
#使用try嘗試定位驗證碼圖片對應的id,如果沒有找到,則直接點登入鍵登入
#因為測試時,網頁已經出現驗證碼,暫時去不掉,所以這個功能沒有測試。不知道是否有用
#在帶驗證碼的頁面,有效
try:
captcha=driver.find_element_by_id("captcha_image")
except NoSuchElementException:
login_button = driver.find_element_by_name('login').click()

#獲取驗證碼的地址,並下載到本地
captcha_image=captcha.get_attribute('src')
response = requests.get(captcha_image, headers=headers)
with open('code.jpg','wb')as f:
f.write(response.content)
"""
打碼平臺 超級鷹 埠接入
"""
chaojiying = Chaojiying_Client('chaojiyinghx', 'hexia_chaojiying', '96001')
#識別之前下載的驗證碼圖片
im = open('code.jpg', 'rb').read()
a = chaojiying.PostPic(im, 1902)
#平臺識別以後,給到的是帶有其他內容的字典,其中驗證碼對應的KEY是pic_str
captcha = a['pic_str']

#找到驗證碼的輸入框,並輸入驗證碼
captcha_input=driver.find_element_by_name('captcha-solution')
captcha_input.send_keys(captcha)

login_button=driver.find_element_by_name('login').click()

time.sleep(1)

login(url)





因為初學python,python的基礎方面,也就是剛剛看完一本書,加慕課網上的一些學習資料,然後後來又花了很多學習其他東西,對程式碼模組化的記憶模糊了,所以程式碼感覺是一坨一坨的,下個階段準備重新看下基礎,重構下這次的內容