一个简单的用chromedrive实现自动登录 并且破解登录的验证码

from selenium import webdriver
import time
import requests
from lxml import etree
import base64
#操作浏览器
def getheaders():
    driver = webdriver.Chrome()
    #这是要访问的网站
    url = 'https://accounts.douban.com/login?alias=&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1001'
    time.sleep(2)
    #访问网站
    driver.get(url)
    time.sleep(2)
    #找到地方放入登录用户名密码
    driver.find_element_by_id('email').send_keys('******')
    driver.find_element_by_id('password').send_keys('******')
    #有验证码的情况
    try:
        #用xpath定位到验证码图片
        html_ele = etree.HTML(driver.page_source)
        html_img = html_ele.xpath('//img[@id="captcha_image"]/@src')[0]
        #获取图片的内容
        response = requests.get(html_img)
        #先用64把他转换成需要的格式
        b64_str = base64.b64encode(response.content)
        v_type = 'cn'
        # post 提交打码平台的数据
        form = {
            'v_pic': b64_str,
            'v_type': v_type,
        }
        #打码平台的headers
        headers = {
            'Authorization':'APPCODE 5c3fb1*****2c6b7e297cc7'
        }
        #阿里云打码的提交地址
        url = 'http://yzmplus.market.alicloudapi.com/fzyzm'
        #获取返回值的验证码
        response = requests.post(url,data=form,headers=headers)
        res_vcode = response.json()['v_code']
        print(res_vcode)
        #放入验证码到地方
        driver.find_element_by_id('captcha_field').send_keys(res_vcode)
    except:
        print('don`t need')
    #提交登录
    driver.find_element_by_class_name('btn-submit').click()


    #获取登录以后的cookie
    cookie = driver.get_cookies()
    print(cookie)
    #下面几步把cookie转换成自己需要的格式
    cookie_list = []
    for cookie_dict in cookie:
        cookie_res = cookie_dict['name'] +'='+ cookie_dict['value']
        cookie_list.append(cookie_res)
    cookie = ';'.join(cookie_list)

    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Cookie':cookie

    }

if __name__ == '__main__':
    headers = getheaders()

    #这个路径是登录过后的页面
    url_info = 'https://www.douban.com/people/183367314/'

    response = requests.get(url_info,headers=headers)

    with open('douban.html','wb')as f:
        f.write(response.content)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我理解您的要求,并且将为您提供一个基本的登录自动化测试用例。首先,我们需要安装 Selenium 和相关浏览器驱动程序。 Python 代码如下: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys # 在 Chrome 浏览器中执行测试 driver = webdriver.Chrome() # 打开网站登录页面 driver.get("https://example.com/login") # 输入用户名和密码 username = driver.find_element_by_name("username") username.send_keys("your_username") password = driver.find_element_by_name("password") password.send_keys("your_password") # 输入验证码,此处验证码需要手动输入 # 如果需要通过 API 获取验证码可以使用 Python 的 requests 库 # 识别验证码可以使用 pytesseract 等工具 captcha = input("请输入验证码:") captcha_input = driver.find_element_by_name("captcha") captcha_input.send_keys(captcha) # 提交表单进行登录 login_button = driver.find_element_by_name("login") login_button.click() # 验证登录是否成功 assert "Welcome" in driver.page_source # 关闭浏览器 driver.close() ``` 请注意,验证码需要手动输入。如果您需要通过 API 获取验证码自动识别,请使用 Python 的 requests 和 pytesseract 等库。要避免重复输入相同的内容,可以通过将验证码保存在变量中来实现,例如: ```python # 获取验证码并识别 captcha_image = driver.find_element_by_xpath("//img[@class='captcha']") captcha_image.screenshot('captcha.png') captcha = recognize_captcha('captcha.png') # 输入验证码 captcha_input = driver.find_element_by_name('captcha') captcha_input.send_keys(captcha) ``` 希望这个测试用例有帮助。如果您有任何其他问题,请随时问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值