诶,这两天一直在搞验证码搞得我头皮发麻,昨天晚上做梦都是在搞验证码,好在最后终于搞出来了!!!
开始的思路是用requests库去get验证码的url,然后解析,但是发现做不到,解析的验证码跟登录时的不一样,可能是没有保持同一个会话。后来换了一个思路轻轻松松的就解决了(当然这也是付出了很多时间去探索的)
现在说一下登陆的思路:
输入账号密码什么的都是基本操作,重点是验证码的获取,这里我用的是selenium的截图操作,先将整张页面截取,然后用画图工具打开图片人工解析验证码的坐标,将坐标带入函数进行截取。(selenium提供了自动定位的函数,但是我试了很多次,他的定位很不准,根本定位不到验证码,无奈之下只能人工定位了,但是解决了问题也是很高兴的)
好了,废话不在多说,开代码的时间到了:
from selenium import webdriver
from chaojiying import Chaojiying_Client
from PIL import Image
import time
#去哪网url
url = "https://user.qunar.com/passport/login.jsp?ret=https%3A%2F%2Fwww.qunar.com%2F%3Fex_track%3Dauto_4e0d874a"
def start_project():
#点击密码登录按钮
button_1 = driver.find_element_by_xpath('/html/body/div[2]/div[3]/div[2]/div[1]/div/div/div[5]/a[1]')
button_1.click()
#通过坐标截取验证码
#先截取整个网页
driver.get_screenshot_as_file("F://picture.png")
#在整个页面的基础上截取验证码区域并进行保存
picture = Image.open("F://picture.png")
picture = picture.crop((1390, 390, 1494, 425))#验证码坐标位置
picture.save('F://real.png')
def Verify_project():
#传给打码平台搞验证码
username = '超级鹰账号'
password = '超级鹰密码'
host = '个人的host'#注册会有
chaojiying = Chaojiying_Client(username, password, host)
#读取刚才保存的验证码截图,传给打码平台
im = open("F://real.png",'rb').read()
yan = chaojiying.PostPic(im, 1902)['pic_str']
return yan#返回验证码的值
def Enter_project():
#输入账号密码,点击登录按钮
yan = Verify_project()#获取验证码
#账号
input_1 = driver.find_element_by_xpath('//*[@id="loginForm"]/div[2]/div[1]/input')
input_1.clear()
input_1.send_keys('去哪网账号')
#密码
input_2 = driver.find_element_by_xpath('//*[@id="loginForm"]/div[2]/div[4]/input')
input_2.clear()
input_2.send_keys('密码')
#验证码
input_3 = driver.find_element_by_xpath('//*[@id="captcha"]/div/input')
input_3.clear()
input_3.send_keys(yan)
#点击登录按钮
button = driver.find_element_by_xpath('//*[@id="submit"]')
button.click()
if __name__ == "__main__":
#模拟登陆页面
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()#窗口最大化
driver.implicitly_wait(10)
start_project()
Enter_project()
time.sleep(5)
driver.quit()#退出模拟登陆
这里处理验证码用的是超级鹰打码平台,没有的可以注册一下
超级鹰戳这里进入!!!