from selenium import webdriver from selenium.webdriver.common.by import By import time from lxml import etree import sys # from selenium.webdriver import ActionChains # 导入鼠标悬停模块 import requests # import re # url = 'https://pvp.qq.com/web201605/herolist.shtml' # 王者荣耀主页的网页链接 # # head = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'} # res = requests.get(url = url,proxies = {'ip':'61.216.185.88'}) # wzry.get(res) # 进入王者荣耀主页页面 # content = res.content.decode('gbk') # htt = etree.HTML(content) # # print(htt) def geme(): while True: if choice == '1': # 分类查找 wzry.switch_to.window(wzry.window_handles[0]) # 切换到王者荣耀主页窗口,也就是第一个窗口。 types = input('输入,0,则返回英雄查询模式,输入错误则重新输入。\n输入需要查看的英雄职业:') # 输入要查看的hero(英雄)职业 hero_type = wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div/div/div[2]/div[1]/ul[3]/li/label') # 这里hero的所有职业定位 for target in hero_type: # 这里是把hero的职业定位 赋值给 target,并且遍历所有hero的职业定位 wzry.switch_to.window(wzry.window_handles[0]) # 切换到王者荣耀主页窗口,也就是第一个窗口。 # print(target.text) if types == target.text: # 判断输入的hero职业 变量 types 是否在 所有的hero职业定位里面 否则向下执行else target.click() # 点击hero职业 list_hero = wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div/div/div[2]/div[2]/ul/li/a') # 这里是 英雄职业 定位里面的所有 英雄的Xpath路径 for heros in list_hero: # 这里是for循环的遍历 print(heros.text, end=' ') # 遍历输出职业定位里面的所有英雄(hero) #---------------------------------------------------------------------------------------------------------------------# enter = input('\n输入想要查看的英雄名字:') # 输入你要查询的英雄职业 for heros in list_hero: # 再次for循环遍历 :职业定位的英雄 if enter == heros.text: # 判断输入的 英雄名称 是否在 这个职业里面 heros.click() # 输入为真则执行 点击操作 new1 = wzry.window_handles[-1] # 这里是到最后的一个窗口,也就是打开hero的窗口 skills(new1) # 执行shills函数 也就是输出技能名称的地方 skin(enter) # 皮肤 break else: # 否则执行一下操作 print('输入错误重新输入。。。。。。\n') break # 结束for循环 else: # 每次不匹配时这里都会执行一句 pass # 输入错误时也会执行这里 # print(target.text) # 输出每次不匹配的职业,全部职业也是职业 # print('发生了什么事.') if types == '0': # 结束l print('返回英雄查询模式') break # elif choice == '2': # 指定查找 wzry.switch_to.window(wzry.window_handles[0]) # 切换到王者荣耀主页窗口,也就是第一个窗口。 name = input('输入想要查看英雄的名字:') # if name == '0': print('退回上层指令......') break wzry.find_element(by=By.XPATH, value='//*[@id="search"]').clear() # 清空搜索框 wzry.find_element(by=By.XPATH, value='//*[@id="search"]').send_keys(name) # 在搜索框内输入 sr(输出的值) hero_number = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div/div/div[2]/div[2]/ul').text if hero_number == '': print('输入错误l。') break wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div/div/div[2]/div[2]/ul/li[1]/a').click() # 点击出现的英雄图标 new2 = wzry.window_handles[-1] # 进入最右边的窗口 则新打开的窗口 skills(new2) skin(name) def skills(new): # 技能(skills)函数 wzry.switch_to.window(new) # 切换窗口的命令 skills_long = len(wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div')) skill_five = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/ul/li[5]/img') pro = skill_five.get_attribute('src').endswith('###') if pro is True: skills_long = skills_long-1 # 技能'ul'中会多一个无用的'li' # 查看技能的个数 for i in range(skills_long): location=wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/ul/li[{}]/img'.format(i + 1)) ActionChains(wzry).move_to_element(location).perform() # 鼠标的悬停使用 # 点击每个技能 skill_name=wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[{}]/p[1]/b'.format(i + 1)).text # 技能的名称 skill_brief=wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[{}]/p[2]'.format(i + 1)).text # 技能的简介 skill_coling=wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[{}]/p[1]/span[1]'.format(i + 1)).text # 技能的冷却 skill_consume=wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[{}]/p[1]/span[2]'.format(i + 1)).text # 技能的消耗 print(skill_name,'\n',skill_brief,'\n',skill_coling,' ',skill_consume,) # 输出技能描述等 print()# 换行 # --------------------------------------------------hero关系----------------------------------------------------------- # for item in range(1, 4): # 搭档的关系,压制的关系,被压制的关系 1,2,3 (左闭右开结构) hero_Relation = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[3]/ul/li[{}]'.format( item)) # 英雄之间的关系之间的悬停(点击) ActionChains(wzry).move_to_element(hero_Relation).perform() # 鼠标的悬停使用 print(hero_Relation.text, ':') # 输出关系 time.sleep(0.5) # 延时0.5s输出 for i in range(1, 3): # 相关的关系由两个英雄组成,1,2 hero_n = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[3]/div/div[{}]/div[2]/ul/li[{}]/a/img'.format( item, i)) # 相关英雄的悬停操作 ActionChains(wzry).move_to_element(hero_n).perform() # 相关英雄悬停 hero_amount = wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[3]/div/div[{}]/div[3]/p[{}]'.format( item, i)).text # 相关英雄关系的text文本输出 print(hero_amount) print() def skin(sr): # 皮肤 skin_number = len(wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[2]/ul/li')) print('{}共有{}个皮肤'.format(sr, skin_number)) skin_name = wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[2]/ul/li/p') # 这里是一个列表+s skin_wrapper = wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[2]/ul/li/i/img') for i in range(skin_number): print('皮肤名称:', skin_name[i].text) skin_url = 'http:' + skin_wrapper[i].get_attribute('data-imgname') print(skin_url) skin_long = wzry.find_elements(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[1]/ul/li') for i in range(1, len(skin_long) + 1): skin_name = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[1]/ul/li[{}]/em'.format(i)) skin = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[1]/div/div/div[1]/ul/li[{}]/span/i'.format(i)) print(skin_name.text, ':', end='') Text = skin.get_attribute('style') m = re.finditer(r"\d+", Text) for match in m: num = match.group() print(match.group() + '%') attack = int(num) / 10 ability = ['■' for i in range(int(attack))] abili = ['□' for a in range(10 - int(attack))] print(''.join(ability), end='') print(''.join(abili)) hero_ = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[2]/p[1]/span').text # 英雄技能主升 hero_1 = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[2]/p[3]/span').text # 英雄技能副升 hero_2 = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[1]/div[2]/p[5]/span').text # 召唤师技能 print('\n英雄技能主升:', hero_, '\n英雄技能副升:', hero_1, '\n召唤师技能:', hero_2) print() print('------------------------------') inscription_recommend = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[1]/div[3]/div[2]/p') # 铭文介绍 for item in range(1, 4): hero_inscription = wzry.find_elements(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[3]/div[2]/ul/li[{}]/p'.format(item)) # 检测每一个铭文的效果数量 for jmenu in range(1, len(hero_inscription) + 1): inscription_brife = wzry.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div/div[1]/div[3]/div[2]/ul/li[{}]/p[{}]'.format(item, jmenu)).text # 输出铭文的效果 print(inscription_brife) print(inscription_recommend.text) print('----------------------------------------------------------------------------------------------------') item = int(input('霸王条款出现了,因为只有推荐一和推荐二:')) if item != 1 and item != 2: print('结束浏览器中...') wzry.quit() # 结束浏览器 print('结束浏览器成功。\n结束程序中......') time.sleep(3) sys.exit(0) # 结束整个程序 hero_e = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[2]/div[1]/ul/li[{}]'.format( item)) # 出装悬停操作 ActionChains(wzry).move_to_element(hero_e).perform() # 鼠标的悬停使用 time.sleep(0.3) print(hero_e.text, ) for i in range(1, 7): hero_exist = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[2]/div[2]/div[{}]/ul/li[{}]/a/img'.format( item, i)) # 生存 ActionChains(wzry).move_to_element(hero_exist).perform() # 鼠标的悬停使用 time.sleep(0.1) hero_1 = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[2]/div[2]/div[{}]/ul/li[{}]/a/div/div[1]/div/h4'.format( item, i)).text # 出装悬停操作 hero_2 = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[2]/div[2]/div[{}]/ul/li[{}]/a/div/div[1]/div/p[1]'.format( item, i)).text hero_3 = wzry.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div/div[2]/div[2]/div[2]/div[{}]/ul/li[{}]/a/div/div[1]/div/p[2]'.format( item, i)).text # 出装悬停操作 print(hero_1, hero_2, hero_3) if __name__=='__main__': wzry = webdriver.Chrome(executable_path=r'../chromedriver.exe') wzry.get('https://pvp.qq.com/web201605/herolist.shtml') # 进入王者荣耀主页页面 while True: time.sleep(1) new3 = wzry.window_handles[0] # 切换回主窗口的命令 wzry.switch_to.window(new3) # 切换窗口的命令 choice = input('选择英雄查询模式:输入其它则退出!\n1.按分类查找. 2.指定查找:') if choice != '1' and choice != '2': print('结束浏览器中...') wzry.quit() # 结束浏览器 print('结束浏览器成功。\n结束程序中......') time.sleep(3) sys.exit(0) # 结束整个程序 else: print('这里开始运行l.') geme() # /html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[1]/p[1]/b 1技能的名称 # /html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[1]/p[2] 技能的简介 # /html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[3]/p[1]/span[1] 技能的冷却 # /html/body/div[3]/div[2]/div/div[1]/div[2]/div/div/div[4]/p[1]/span[2] 技能的消耗
【亚瑟王】
最新推荐文章于 2024-09-11 18:01:31 发布