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
超级鹰破bilibili点选验证码
最新推荐文章于 2024-07-12 16:16:27 发布