暗网不做过多需要介绍,有兴趣的可以上网搜搜了解下.打码平台用的是超级鹰参考开发文档
超级鹰代理是用的socks5转换的http/https的代理具体转换方式这里不做详细介绍,另外一点因为需要放到linux下,所以webdrive要设置无界面我这里使用的是chrome,也可以使用phantomjs,但是firefox不行因为在linux系统下没法同时设置无界面和使用代理ip.目标url地址
暗网登录入口
超级鹰部分 参照开发文档python部分稍作修改即可
#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
自动登录部分
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
# from selenium.webdriver.firefox.firefox_profile import FirefoxProfile #火狐代理
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from PIL import Image
from chaojiying import *
class Spider(object):
def __init__(self):
# self.profile = self.get_profile() #火狐相关设置
self.chromeOptions = self.get_profile()
self.browser = self.get_browser()
self.wait = self.get_wait()
def main(self):
self.get_image()
chaojiying = Chaojiying_Client('chaojiyingcmq', 'cc123456', '868692') #用户中心>>软件ID 生成一个替换 96001
im = open('img.png', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
# print(chaojiying.PostPic(im, 1902)) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
code = chaojiying.PostPic(im, 1902)
global result
result = code ["pic_str"] #解析的验证码结果取字典的value
print(result)
self.login()
def get_profile(self):
#火狐相关设置
# profile = FirefoxProfile()
# profile.set_preference("network.proxy.type", 1) # 激活手动代理配置(对应着在 profile(配置文件)中设置首选项)
# profile.set_preference("network.proxy.http", "192.168.126.110") # ip及其端口号配置为 http 协议代理
# profile.set_preference("network.proxy.http_port", 9398)
# profile.set_preference("network.proxy.share_proxy_settings", True) # 所有协议共用一种 ip 及端口,如果单独配置,不必设置
# return profile
#谷歌相关设置
chromeOptions = webdriver.ChromeOptions()
# chromeOptions.add_argument('--headless') # 谷歌无头模式
chromeOptions.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug 这是禁用显卡
chromeOptions.add_argument('window-size=1280,800') # 指定浏览器分辨率
chromeOptions.add_argument("--no-sandbox")
chromeOptions.add_argument("--proxy-server=http://192.168.126.110:9398") # 设置代理
return chromeOptions
def get_browser(self):
#火狐相关设置
# browser = webdriver.Firefox(self.profile) # 以代理方式启动 firefox
# browser.set_window_size(
# 1280,800)
#谷歌相关设置
browser = webdriver.Chrome(chrome_options=self.chromeOptions)
#browser.set_window_size(1280,800)
return browser
def get_wait(self):
wait = WebDriverWait(self.browser, 8) # 强制等待10s
return wait
def login(self):
try:
self.browser.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div[2]/form/fieldset/div[1]/input').send_keys('wahaha') #账号输入
except:
print("账号输入有误")
try:
self.browser.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div[2]/form/fieldset/div[2]/input').send_keys('laoganma') #密码输入
except:
print("密码输入有误")
try:
self.browser.find_element_by_xpath\
("/html/body/div/div[2]/div/div/div/div[2]/form/fieldset/div[3]/input").send_keys(result) #输入解析的验证码
except:
print("验证码输入错误")
try:
button = self.browser.find_element_by_xpath("/html/body/div/div[2]/div/div/div/div[2]/form/fieldset/button")
button.click() #点击登录按钮
#span.badge:nth-child(3)
try:
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.page-header > h3:nth-child(1)')))
except:
#重新执行的函数
self.main()
except:
# testspider = Spider()
# testspider.main()
print('页面关闭')
def login_url(self): #访问目标网址
try:
self.browser.get("http://apollonwmwenxcwa.onion/login.php")
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btn')))
except:
self.browser.refresh() #刷新当前页面,因为可能会因为网络问题造成阻塞
def get_image(self): # 对验证码所在位置进行定位,然后截取验证码图片
self.browser.save_screenshot('img1.png') # 截取全屏
# 设置好图片的位置
left = 840
# print(left)
upper = 480
# print(upper)
right = 230+left
# print(right)
lower = 90+upper
# print(lower)
img = Image.open('img1.png') # 打开全屏,进行验证码截取
im = img.crop((left, upper, right, lower)) # 将图片的位置作为一个元组传入
im.save('img.png') # 最后保存图片
if __name__ == '__main__':
testspider = Spider()
testspider.login_url()
testspider.main()