1、常用的打码平台:超级鹰、打码兔等
2、打码平台在识别图形验证码和点触验证码上比较好用
(1)12306点触验证码
1 from selenium import webdriver 2 from selenium.webdriver.support import expected_conditions as EC 3 from selenium.webdriver.support.wait import WebDriverWait 4 from selenium.webdriver.common.by import By 5 from selenium.webdriver.common.action_chains import ActionChains 6 from chaojiying import Chaojiying_Client 7 from account import USERNAME12306, PASSWORD12306, USERNAMECJY, PASSWORDCJY 8 import time 9 10 11 class TrainLogin(object): 12 def __init__(self, username, password): 13 self.username = username 14 self.password = password 15 self.index_url = "https://www.12306.cn/index/" 16 self.login_url = "https://kyfw.12306.cn/otn/resources/login.html" 17 self.code_path = r"E:\vscode\Python\超级鹰验证码识别\chaojiying_Python\12306.png" 18 self.chrome = webdriver.Chrome(r"D:\chromedriver_win32\chromedriver.exe") 19 self.chaojiying = Chaojiying_Client(USERNAMECJY, PASSWORDCJY, "903176") 20 21 def login(self): 22 self.pre_set() 23 self.come_login_url() 24 self.process_username_password() 25 while True: 26 self.process_captchar() 27 if self.success_login(): 28 print("成功登陆!!!") 29 break 30 time.sleep(5) 31 self.chrome.quit() 32 33 def pre_set(self): 34 self.chrome.implicitly_wait(1) 35 self.chrome.maximize_window() 36 37 def come_login_url(self): 38 self.chrome.get(self.login_url) 39 WebDriverWait(self.chrome, 5).until(EC.presence_of_element_located((By.LINK_TEXT, "账号登录"))) 40 self.chrome.find_element_by_link_text("账号登录").click() 41 42 def process_username_password(self): 43 self.chrome.find_element_by_id("J-userName").send_keys(self.username) 44 time.sleep(1) 45 self.chrome.find_element_by_id("J-password").send_keys(self.password) 46 47 def process_captchar(self): 48 self.chrome.find_element_by_class_name("login-pwd-code").screenshot(self.code_path) 49 with open(self.code_path, "rb") as fp: 50 img = fp.read() 51 res = self.chaojiying.PostPic(img, 9004)["pic_str"] 52 pos_ls = self.get_postion_ls(res) 53 action_chains = ActionChains(self.chrome) 54 for pos in pos_ls: 55 action_chains.move_to_element_with_offset(self.chrome.find_element_by_class_name("login-pwd-code"), 56 pos[0], pos[1]).click().release().perform() 57 time.sleep(0.5) 58 action_chains = ActionChains(self.chrome) 59 60 def success_login(self): 61 self.chrome.find_element_by_id("J-login").click() 62 try: 63 WebDriverWait(self.chrome, 5).until(EC.text_to_be_present_in_element((By.CLASS_NAME, "welcome-name"), "XXX")) 64 except: 65 return False 66 else: 67 return True 68 69 def get_postion_ls(self, pos_str): 70 pos_ls = [] 71 for pa in pos_str.split("|"): 72 pos = [] 73 for pb in pa.split(","): 74 pos.append(int(pb)) 75 pos = tuple(pos) 76 77 pos_ls.append(pos) 78 return pos_ls 79 80 81 if __name__ == "__main__": 82 loginer = TrainLogin(USERNAME12306, PASSWORD12306) 83 loginer.login()
(2)哔哩哔哩点触验证码
1 from selenium import webdriver 2 from selenium.webdriver.support import expected_conditions as EC 3 from selenium.webdriver.support.wait import WebDriverWait 4 from selenium.webdriver.common.by import By 5 from selenium.webdriver.common.action_chains import ActionChains 6 from chaojiying import Chaojiying_Client 7 from account import USERNAMEBL, PASSWORDBL, USERNAMECJY, PASSWORDCJY 8 import time 9 10 class BiLiLogin(object): 11 def __init__(self, username, password): 12 self.username = username 13 self.password = password 14 self.chrome = webdriver.Chrome(r"D:\chromedriver_win32\chromedriver.exe") 15 self.code_path = r"E:\vscode\Python\超级鹰验证码识别\chaojiying_Python\bili.png" 16 self.login_url = "https://passport.bilibili.com/login" 17 self.chaojiying = Chaojiying_Client(USERNAMECJY, PASSWORDCJY, "903176") 18 19 20 def login(self): 21 self.pre_set() 22 self.come_login_win() 23 self.process_username_password() 24 while True: 25 self.process_captchar() 26 if self.is_success(): 27 print("登录成功!!!") 28 break 29 print(self.chrome.get_cookies()) 30 # 延迟十秒退出 31 time.sleep(10) 32 self.chrome.quit() 33 34 35 def pre_set(self): 36 self.chrome.implicitly_wait(1) 37 self.chrome.maximize_window() 38 39 def come_login_win(self): 40 self.chrome.get(self.login_url) 41 42 def process_username_password(self): 43 self.chrome.find_element_by_id("login-username").send_keys(self.username) 44 self.chrome.find_element_by_id("login-passwd").send_keys(self.password) 45 self.chrome.find_element_by_class_name("btn-login").click() 46 47 def process_captchar(self): 48 WebDriverWait(self.chrome, 5).until(EC.presence_of_element_located((By.CLASS_NAME, "geetest_widget"))) 49 time.sleep(5) 50 self.chrome.find_element_by_class_name("geetest_widget").screenshot(self.code_path) 51 with open(self.code_path, "rb") as fp: 52 img = fp.read() 53 pos_str = self.chaojiying.PostPic(img, "9004")["pic_str"] 54 pos_ls = self.get_postion_ls(pos_str) 55 for pos in pos_ls: 56 action_chain = ActionChains(self.chrome) 57 action_chain.move_to_element_with_offset(self.chrome.find_element_by_class_name("geetest_widget"), pos[0], pos[1]).click().release().perform() 58 time.sleep(0.5) 59 self.chrome.find_element_by_class_name("geetest_commit").click() 60 61 def is_success(self): 62 try: 63 WebDriverWait(self.chrome, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "nickname"))) 64 except: 65 return False 66 else: 67 return True 68 69 70 def get_postion_ls(self, pos_str): 71 pos_ls = [] 72 for pa in pos_str.split("|"): 73 pos = [] 74 for pb in pa.split(","): 75 pos.append(int(pb)) 76 pos = tuple(pos) 77 78 pos_ls.append(pos) 79 return pos_ls 80 81 82 if __name__ == "__main__": 83 loginer = BiLiLogin(USERNAMEBL, PASSWORDBL) 84 loginer.login()
原文:https://www.cnblogs.com/loveprogramme/p/12209296.html