【亚瑟王】

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] 技能的消耗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值