关于我为了玩游戏而学了一门语言
前言
`(本人是一个小白,目前还在上高中如果有写的不好的还请各位大佬见谅)
最近在玩一个游戏叫最终幻想14游戏,里面的生产算法使我这种懒狗实在是懒得去肝(确实是懒人推动生产力了qwq)。迫不得已去网上找能代替我做算法的网站。但是网站是输入点击计算一系列按钮又太繁琐,所以就想着用机器代替人工,自己只需要输入必要的数据就好了。
一、导入selenium记得导入webdriver的时候看看自己python文件夹里有没有chromedriver(我用的是这个)
二、new一个隐示的driver
代码如下(示例):
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options = chrome_options)
scroll_width = 1600
scroll_height = 1500
driver.set_window_size(scroll_width, scroll_height)
这里的scroll_width和scroll_height是用来控制隐示浏览器的宽高(不增加宽高有些xpath会获取不到)
2.对input的数据进行一个clear
代码如下(示例):
def clear():
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[1]/div/input').clear()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[2]/div/input').clear()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[3]/div/input').clear()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[4]/div/input').clear()
将原有的默认数据清空(直接send.keys输入并不会覆盖)
(用for循环可能会更清楚但是我实在太懒了)
3.精度数据的获取
代码如下(示例):
driver.get('http://ffxiv.tk/crafter/#/crafter-attributes')
occupation()
clear()
level = input("请输入等级")
Operation_accuracy = input("请输入作业精度")
Machining_accuracy = input("请输入加工精度")
Production_force = input("请输入制作力")
#等级
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[1]/div/input').send_keys(level)
#作业精度
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[2]/div/input').send_keys(Operation_accuracy)
#加工精度
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[3]/div/input').send_keys(Machining_accuracy)
#制作力
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[1]/form/fieldset/div[4]/div/input').send_keys(Production_force)
#技能选择
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div/div[2]/div[2]/form/fieldset/legend/span/button[2]').click()
将精度,等级,技能填写。
3.求解器
代码如下(示例):
def Solver():
i = 0
solver_list = []
driver.get('http://ffxiv.tk/crafter/#/solver')
time.sleep(1)
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[1]/div/form/div[2]/div/div/button').click()
driver.find_element_by_xpath(f'/html/body/div/div[2]/div/ng-form/div/div/div[1]/div/form/div[2]/div/div/ul/li[{occupation_input}]/a').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="recipe-menu-root"]/div[1]/div/button').click()
Make = input("请输入你要制作的配方")
driver.find_element_by_xpath('//*[@id="recipe-menu-root"]/div[1]/span').click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="recipe-search-text"]').send_keys(Make)
time.sleep(1)
driver.find_element_by_xpath('//*[@id="recipeSearchElement0"]').click()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[3]/div/button[1]').click()#开始
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[5]/div/ul/li[3]').click()
print("推算最优宏....")
#time.sleep(60)
while True:
if driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[3]/div/button[1]').text == "停止":
break
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[3]/div/button[2]').click()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[5]/div/div/div[3]/macros/form/div/div[1]/label/input').click()
driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[5]/div/div/div[3]/macros/form/div/div[2]/label/input').click()
time.sleep(1)
Macro = driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[5]/div/div/div[3]/macros/div/textarea').text
print(Macro)
time_result = driver.find_element_by_xpath('/html/body/div/div[2]/div/ng-form/div/div/div[5]/div/div/div[3]/macros/div[1]/h6/small').text
print("宏用时"+time_result)
将求解器启动,对于各个职业和职业内的素材进行选择。
3.selenium下拉框的选取
当初选取这个下拉框的时候可愁死我了,一直报错,以为是iframe结果并没有发现。然后又去百度,百度上的代码也不行。思来想去。
driver.find_element_by_xpath(f'/html/body/div/div[2]/div/ng-form/div/div/div[1]/div/form/div[2]/div/div/ul/li[{occupation_input}]/a').click()
time.sleep(1)
发现!选取到下拉框之后需要sleep 1秒钟,折磨了半天呀,原来问题这么简单!!