超级鹰破bilibili点选验证码

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

from PIL import Image

from chaojiying import Chaojiying_Client

options = Options()

# chrome_options.add_argument("--headless")

import time

options.add_experimental_option("excludeSwitches", ['enable-automation']) #这个是显示浏览器在被控制

driver=webdriver.Chrome(options=options)#options=chrome_options

driver.maximize_window()#窗口最大化方便后续截图

driver.get('https://www.bilibili.com/')

# assert "哔哩哔哩" in driver.title

login=driver.find_element(By.XPATH,'//div[@class="header-login-entry"]').click()#登录按钮

time.sleep(1)#强制等待

user_l=driver.find_elements(By.XPATH,'//div[@class="form__item"]/input')#输入账号密码框

time.sleep(2)#强制等待

user_l[0].send_keys('1557284')

user_l[1].send_keys('1597199') #输入账号密码

btn_primary=driver.find_element(By.XPATH,'//div[@class="btn_wp"]/div[2]').click()#点击登录按钮

time.sleep(5)#等验证码盒子出来

geetest_panel=driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div')#找到验证码盒子320x410


 

geetest_panel.screenshot('geetest_panel_box.png')#验证码盒子截图

print('验证码盒子大小',geetest_panel.size)

print('盒子的坐标',geetest_panel.location.values())

time.sleep(2)#强制等待

driver.save_screenshot('max_scene1.png')#全屏截图


 

# print('盒子坐标',location.values())

# x1,y1=location['x'],location['y']

# 获取这个图片的大小

# size=geetest_panel.size

# 获取右下角的坐标

# x2,y2=x1+size['width'],y1+size['height']

# 774,241 774,252

# print('验证码左上角右下角盒子坐标',x1,y1,x2,y2)

# 通过两个对角坐标获取验证码小图

# back_img=Image.open('max_scene.png')

# 利用两个坐标进行裁剪

# new_background=back_img.crop((x1,y1,x2,y2))

# new_background.save('min_pic.png')

# 使用咱们的打码平台进行识别

chaojiying=Chaojiying_Client('yumyulacy','******','957279')

im=open('geetest_panel_box.png','rb').read()

code=chaojiying.PostPic(im,9004)['pic_str']

print('打码平台解析出来的坐标和类型和长度',type(code),code==False,code)

# 获取到坐标点列表

all_location = []  # 创建一个空列表,用于汇总处理后的各个文字的坐标

list_temp=code.split('|')

print('坐标点list_temp',list_temp)

for i in list_temp:

  list_i=[]#创建一个空列表,用于储存每个文字的坐标

  x=int(i.split(',')[0]) #根据","拆分字符串,提取第1个元素(x坐标)并转换为整数

  y=int(i.split(',')[1])

  list_i.append(x),

  list_i.append(y),

  all_location.append(list_i)

print('什么都处理完后的列表坐标',all_location)

for i in all_location:

    x = i[0]-160 # 提取x坐标

    y = i[1]-205 # 提取y坐标

    action = webdriver.ActionChains(driver) # 启动动作链

    print(f"动作链条已经启动,点击的坐标是{x,y}")

    try:

      action.move_to_element_with_offset(geetest_panel,x,y).click().perform() #根据坐标模拟单击文字

    except Exception as e:

      print('点击部分不成功',e)

    time.sleep(0.5)

time.sleep(10)

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_panel > a').click() #模拟单击验证码“确认"按钮

                       



 

# driver.close() #主动关闭selenium

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值