Selenium使用图鉴实现B站点选验证码登录

真的跳好多坑我原本打算用ddddor+超级鹰实现的一开始在CSDN上面copy结合了好多版本的但是一直仅仅运行到图片坐标直出现不会写怎么根据坐标来点击,搞了好多天然后最后放弃了

一个原因是因为根本看不懂代码的意思

二是版本很杂而且步骤基本不详细

我是那种需要每一步都标注演示才能弄懂得人。

后续真的很感谢知乎上面的一个视频博主让我成功实现了视频链接:Python学习:点选验证码.. - 知乎 (zhihu.com)

(实现操作的关键步骤视频中都有,除了一点新增了一个属性值typeid,不过不是什么大问题,因为新版的脚本代码里面注释写的很详细)

我的操作步骤如下

1进入图鉴网站:图片识别-广告识别-目标检测-图鉴网络科技有限公司 (ttshitu.com)

2复制开发文档中的python脚本代码同时在代码目录中新建名为tujian.py的python文档

3注册账号登录然后充值(真的很划算了一元一百多次)而且它还可以先试用9次(当然是在充值之后的前提下)

4按照下面的代码运行

# 悬停登录首次注册

action = ActionChains(driver)

element = driver.find_element(By.XPATH, '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div')

action.move_to_element(element).perform()

sleep(5)

driver.find_element(By.XPATH, '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div[2]/div/div/div[3]/span').click()

sleep(5)

# 输入账号密码

account = driver.find_element(By.XPATH, '/html/body/div[4]/div/div[4]/div[2]/form/div[1]/input')

account.send_keys('15320238462')

sleep(3)

password = driver.find_element(By.XPATH, '/html/body/div[4]/div/div[4]/div[2]/form/div[3]/input')

password.send_keys('dandelion0709')

sleep(5)

driver.find_element(By.XPATH, '/html/body/div[4]/div/div[4]/div[2]/div[2]/div[2]').click()

sleep(5)

#

#

# 获取验证码的元素,进行截图并保存到D盘 截屏函数save_screenshot()

image = driver.find_element(By.CSS_SELECTOR, 'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick')

# image = driver.find_element(By.CSS_SELECTOR, 'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_table_box')

image.screenshot('yzm.png')

#设定截屏路径

screenshot_path = 'D:/img/yzm.png'

driver.get_screenshot_as_file(screenshot_path)

sleep(5)

# 图鉴识别

code_result = base64_api('dandelion','Ljt0709','yzm.png','21')

print('当前验证码识别结果',code_result)

# 分割图鉴识别的验证码坐标位置 split,使用result_list接受分割后返回列表

result_list = code_result.split('|')

# 打印分割后的列表

print(result_list)

# 将结果列表中的点遍历出来,同时构建每个点的横纵坐标,x为横纵,y为纵轴,用,分割

for result in result_list:

    x = result.split(',')[0]

    y = result.split(',')[1]

# 导入动作链对象执行点击操作

# move_to_element_with_offset(点击对象,int(对象的x轴),int(对象的y轴)) 可以指定标签元素进行点击

# x,y 轴要求是整型数字,进行强制转换

# move_to_element_with_offset(image, int(x), int(y))即在image图片对象当中根据坐标执行一个点击,

    ActionChains(driver).move_to_element_with_offset(image, int(x), int(y)).click().perform()

# 点击确认

driver.find_element(By.XPATH, '/html/body/div[5]/div[2]/div[6]/div/div/div[3]/a/div').click()

#driver.quit()

至此B站登录就能够成功完成了,如果代码不行的话推荐去看看视频链接

成功运行视频如下:(一开始脚本运行爆红是因为每次运行脚本后就算没写driver.quit都会立即退出测试页面,不方便查看测试结果因此加了一个input("按任意键退出")的功能,如果有小伙伴跟我遇到一样的问题也可以试一下这个方法)

(CSDN中原则上不可以上传视频,但是可以上传gif动态图,为了实现这个问题我参考了两个博客

CSDN上传视频_csdn视频无法上传-CSDN博客此博客用于下载转换视频类型软件LICEcap

LICEcap(GIF屏幕录制工具)简单使用说明 - 我有我奥妙 - 博客园 (cnblogs.com)此博客为如何使用软件)

(竟然只能保存5MB的gif,后期视频又去加速处理了8倍速,我天,自己都被惊到了,不过总算能个上传视频了)

可能出现的问题:验证码无法识别成功可能是因为图鉴本身识别问题多试几次就好了,最重要的是要出现识别结果的坐标(如下图)这样后续点击才可以顺利进行

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值