文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Selenium模拟登陆百度(带验证码)

2023-01-30 22:07

关注

利用Selenium模拟登陆解决验证码的问题

验证码解决方案有很多种:

1  通过第三方的打码平台,识别率高...一般都是收费的,价格还不便宜

2  自己通过切图,再结合图片识别的库,去识别验证码... 简单的验证码识别率还可以,但是复杂的验证码需要训练(机器学习),     难度大

3  通过手动登陆,获取cookie信息,利用cookie实现免登陆... cookie一般都是有 有效期的,时间一过,那么下次就又需要手       动登陆去获取新的cookie,很繁琐,实现简单

4  利用切图把验证码图片切出来,再通过手动输入验证码去登陆(账号,密码可让程序自行输入)...每次登陆都需要手动输入       验证码登陆,很繁琐,实现简单


本次环境,将使用第四种方法来解决验证码问题

目标网站:https://www.baidu.com   模拟登陆百度

在模拟登陆百度之前,首先手动输错几次,让验证码显示出来

默认登陆是不需要验证码的,但输错2次之后,就需要验证码了,如下图:

blob.png


PS:运行次脚本前,先模拟登陆失败几次,不然验证码不会出来


Selenium登陆百度代码如下:

class LoginBaiDu(object):
    def __init__(self, url, password, username):
        self.url = url
        self.password = password
        self.username = username
        self.browser = self.getbrowser()
        self.run(self.browser)

    def getbrowser(self):
        chrome_options = webdriver.ChromeOptions()
        browser = webdriver.Chrome(options=chrome_options,
                                   executable_path=r'D:\chromedriver_2.41\chromedriver.exe')
        browser.get(self.url)
        # 清除cookies记录
        browser.delete_all_cookies()
        return browser

    def run(self, browser):
        # 找到登陆按钮
        browser.find_element_by_xpath("//div[@id='u1']/a[text()='登录']").click()
        # 等待网站加载
        browser.implicitly_wait(3)
        # 定位弹出框
        browser.current_window_handle
        # 找到用户名登录按钮,并点击登录
        browser.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()
        time.sleep(2)
        # 找到输入用户名的input标签,模拟输入用户名
        browser.find_element_by_id("TANGRAM__PSP_10__userName").send_keys(self.username)
        time.sleep(3)
        # 找到输入密码的input标签,模拟输入密码
        browser.find_element_by_id("TANGRAM__PSP_10__password").send_keys(self.password)
        time.sleep(10)
        # 对整个页面进行截图
        browser.get_screenshot_as_file('login.png')
        # 定位验证码的坐标
        code = browser.find_element_by_xpath("//span[@class='pass-verifyCodeImgParent']\
        /img[@id='TANGRAM__PSP_10__verifyCodeImg']")
        # 计算验证码四个点的坐标
        left = code.location['x']
        top = code.location['y']
        right = code.location['x'] + code.size['width']
        bottom = code.location['y'] + code.size['height']
        print("验证码坐标::", left, top, right, bottom)
        # 利用python的图像处理库,将验证码切出来,保存验证码code.png到当前目录
        im = Image.open('login.png')
        im = im.crop((left, top, right, bottom))
        im.save('code.png')
        self.user_input(browser)

    def user_input(self, browser):
        # 查看code.png图片,手动输入验证码
        user_code = input("验证码:").strip()
        # 找到验证码的输入框,并将手动输入的验证码赋值到验证码输入框
        browser.find_element_by_id("TANGRAM__PSP_10__verifyCode").send_keys(user_code)
        # 找到登陆按钮,并点击登录
        browser.find_element_by_id("TANGRAM__PSP_10__submit").click()
        try:
            # 如果登陆成功,获取用户信息
            username = browser.find_element_by_id("s_username_top").text
            if username:
                print('登陆成功')
                print(username)
            # 登陆失败,打印错误信息
        except Exception as e:
            print("登陆失败错误信息:{}".format(e))
        finally:
            # 退出程序
            time.sleep(10)
            browser.quit()


if __name__ == '__main__':
    url = 'https://www.baidu.com'
    username = '账号'
    password = '密码'
    st = LoginBaiDu(username=username, password=password, url=url)


运行程序截图

程序到了验证码那里,会停住,需要手动输入验证码

blob.png


输入验证码后,会自动赋值到验证码的输入框

blob.png


然后就可以看到显示登录成功,打印用户信息

blob.png


还会在当前目录下,生成两个png图片

login.png截图

blob.png


code.png为切出来的验证码

blob.png

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯