1.python自动化登录12306

python selenium 自动化登录12306

1.下载依赖包

pip install selenium	# 自动化必须的包

2.下载驱动

# 下载驱动 https://npm.taobao.org/mirrors/chromedriver

小编这儿用的是chrome浏览器,下载对应自己浏览器版本的驱动包

chrome驱动下载

我是windows电脑(根据个人情况适当下载)

Chrome windows驱动

把下载到的驱动放到python的安装目录

chrome 放置位置

3.开始代码编程

  • 第一步 : 访问12306首页,获取到登录按钮(copy xpath路径)

在这里插入图片描述

    # 打开浏览器
    browser = Chrome()
	# 设置浏览器窗口大小
    browser.set_window_size(1400, 1000)
    # 访问12306首页
    browser.get("https://www.12306.cn/index/")
    # 获取[登录]按钮
    login_button = browser.find_element_by_xpath('//*[@id="J-header-login"]/a[1]')
    # 点击登录
    login_button.click()
  • 第二步 : 到登录页面之后, 获取账号登录按钮并点击

在这里插入图片描述

在这里插入图片描述

# 等待账号登录按钮加载出来
element = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "login-hd-account"))
)
# 或者直接睡眠2s钟
time.sleep(2)
# 账号登录按钮
account_button = browser.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
account_button.click()
  • 第三步 : 识别验证码,使用超级鹰注册一个账号,可以免费识别(有分数限制);有不懂得小伙伴可以私聊或者查看超级鹰的api

    # 图片验证码
    img_by_xpath = browser.find_element_by_xpath('//*[@id="J-loginImg"]')
    # 超级鹰识别验证码
    # 注册之后会有自己的软件id 和 key
    # 软件ID:	123456
    # 软件KEY: ******************
    chaojiying = Chaojiying_Client('12312337866', '123456', '9197123')  # 用户中心>>软件ID 生成一个替换 96001
    # {'err_no': 0, 'err_str': 'OK', 'pic_id': '1147221486687400002', 'pic_str': '180,125|125,132', 'md5': 		'e6060d7b4b8a01cb261074cb15c2401e'}
    coordinate_dic = chaojiying.PostPic(img_by_xpath.screenshot_as_png, 9004)
    print(coordinate_dic)         # 点击两个相同的动物或物品,返回:x1,y1|x2,y2
    dic_pic_str_ = coordinate_dic['pic_str']
    str__split = dic_pic_str_.split("|")
    for rs in str__split:
        temp = rs.split(',')
        x = int(temp[0])
        y = int(temp[1])
        # 点击选中图片
        # 事件链
        # 点击返回的坐标即可
        # 这儿必须有perform()提交事件链操作哦,不要忘了
        ActionChains(browser).move_to_element_with_offset(img_by_xpath,x, y).click().perform()
    
    
  • 第四步 : 输入用户名和密码 ,点击登录

    验证码登录

 	# 输入用户名 密码 点击登录
    login_account = browser.find_element_by_xpath('//*[@id="J-userName"]')
    login_password = browser.find_element_by_xpath('//*[@id="J-password"]')
    # 输入自己的用户名密码
    login_account.send_keys('1234567890')
    login_password.send_keys('123123123')
    time.sleep(2)
    submit_button = browser.find_element_by_xpath('//*[@id="J-login"]')
    submit_button.click()
  • 第五步 : 滑块校验

    滑块校验

# 拖动滑块校验
drag_button = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
# 鼠标点击滑块拖动300像素
ActionChains(browser).drag_and_drop_by_offset(drag_button, 300, 0).perform()
  • 各位小伙伴到这儿可能发现还是登录不上,原因就是12306网站(中国最牛逼的网站,怎么可能那么容易哦)

    登录不上是因为网站已经识别出来是自动化登录的,所以我们需要关闭掉自动化标识

    chrome 88版本以后的浏览器

        #chrome 版本88以后,用下面这种方法
        options = Options()
        options.add_argument('--disable-blink-features=AutomationControlled')
        # 打开浏览器
        browser = Chrome(options=options)
    

    chrome 88版本以前的浏览器

    options = Options()
        options.add_experimental_option("excludeSwitches", ["enable-automation"])
        options.add_experimental_option('useAutomationExtension', False)
        browser = Chrome(options=options, executable_path='./chromedriver')
        browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
          """
        })
    

到这儿就到此结束了,可以登录上了.

4.完整代码

附上完整代码,亲测可以运行的哦(需要修改为自己的用户名密码哦)

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
from pyfile.chaojiying import Chaojiying_Client

if __name__ == '__main__':
    # 12306 登录测试
    # 防止服务器识别出是自动化控制 window.navigator.webdriver
    # chrome 版本88以前用这种方法
    '''
    options = Options()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    browser = Chrome(options=options, executable_path='./chromedriver')
    browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    '''


    #chrome 版本88以后,用下面这种方法
    options = Options()
    options.add_argument('--disable-blink-features=AutomationControlled')
    # 打开浏览器
    browser = Chrome(options=options)

    # 设置浏览器窗口大小
    browser.set_window_size(1400, 1000)
    # 访问12306首页
    browser.get("https://www.12306.cn/index/")
    # 获取[登录]按钮
    login_button = browser.find_element_by_xpath('//*[@id="J-header-login"]/a[1]')
    # 点击登录
    login_button.click()

    try:
        element = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "login-hd-account"))
        )
        print(element)
        time.sleep(2)
        # 账号登录按钮
        account_button = browser.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
        account_button.click()
        time.sleep(3)
        # 图片验证码
        img_by_xpath = browser.find_element_by_xpath('//*[@id="J-loginImg"]')
        # 超级鹰识别验证码
        # 软件ID:	919703
        # 软件KEY: ce58a05f244fa7eb31dc6309186d9b72
        chaojiying = Chaojiying_Client('18512345678', '12345678', '999999')  # 用户中心>>软件ID 生成一个替换 96001
        # {'err_no': 0, 'err_str': 'OK', 'pic_id': '1147221486687400002', 'pic_str': '180,125|125,132', 'md5': 'e6060d7b4b8a01cb261074cb15c2401e'}
        coordinate_dic = chaojiying.PostPic(img_by_xpath.screenshot_as_png, 9004)
        print(coordinate_dic)         # 点击两个相同的动物或物品,返回:x1,y1|x2,y2
        dic_pic_str_ = coordinate_dic['pic_str']
        str__split = dic_pic_str_.split("|")
        for rs in str__split:
            temp = rs.split(',')
            x = int(temp[0])
            y = int(temp[1])
            # 点击选中图片
            # 事件链
            ActionChains(browser).move_to_element_with_offset(img_by_xpath,x, y).click().perform()

        time.sleep(2)
        # 输入用户名 密码 点击登录
        login_account = browser.find_element_by_xpath('//*[@id="J-userName"]')
        login_password = browser.find_element_by_xpath('//*[@id="J-password"]')
        login_account.send_keys('13612345678')
        login_password.send_keys('13612345678')
        time.sleep(2)
        submit_button = browser.find_element_by_xpath('//*[@id="J-login"]')
        submit_button.click()

        time.sleep(2)
        # 拖动滑块校验
        drag_button = browser.find_element_by_xpath('//*[@id="nc_1_n1z"]')
        ActionChains(browser).drag_and_drop_by_offset(drag_button, 300, 0).perform()
    except Exception as e:
            print(e)



有想交流的小伙伴可以关注公众号哦

小不点公众号

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值