我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

利用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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

利用Selenium模拟登陆解决验证码的问题验证码解决方案有很多种:1 通过第三方的打码平台,识别率高...一般都是收费的,价格还不便宜2 自己通过切图,再结合图片识别的库,去识别验证码... 简单的验证码识别率还可以,但是复杂的验证码需要
2023-01-30

Selenium&Pytesseract模拟登录+验证码识别

验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的.验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的.验证码识别涉及到的知识:人工智能,模式识别,机器视觉,图像处理.主要流程:1 图像采集
2023-01-30

selenium+opencv实现滑块验证码的登陆

很多网站登录登陆时都要用到滑块验证码,本文主要介绍了selenium+opencv实现滑块验证码的登陆,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-15

Python爬虫模拟登录带验证码网站

爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法。python提供了强大的url库,想做到这个并不难。这里以登录学校教务系统为例,做一个简单的例子。 首先得明白cookie的作用,cookie是某些网站为了辨别用户身份、
2022-06-04

使用selenium模拟动态登录百度页面的实现

本文主要介绍了使用selenium模拟动态登录百度页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-20

怎么使用selenium+opencv实现滑块验证码的登陆

本文小编为大家详细介绍“怎么使用selenium+opencv实现滑块验证码的登陆”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用selenium+opencv实现滑块验证码的登陆”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
2023-07-06

Python模拟登录验证码(代码简单)

废话不多说了,直接给大家贴代码了。import urllib import urllib2 import cookielib def getImg(picurl): ''' request for random_code picture a
2022-06-04

Java Web开发过程中登陆模块的验证码的实现方式总结

验证码及它的作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定注册用户用
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录