不知道如何正确循环

2024-04-26 14:22:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何正确地循环这一切而不出问题。你知道吗

当它低于8000hp时,控制台会显示“进程结束,退出代码为0”,这很奇怪,因为它不应该停止运行。。。你知道吗

基本上,我需要它无限循环攻击如果>;=8000点生命值+,以确保满足敌人等级+战斗值条件(敌人等级<;=1和BV<;=51)

如果敌方等级或BV为>;=,则应“再次搜索”

如果health<;=8000,它应该一直睡到有足够的时间再战斗

下面是一个供您自己测试的测试帐户:

用户:testaccount123 通过:Python123 游戏:https://s9-en.bitefight.gameforge.com/user/login

from selenium import webdriver
import time
import re

driver = webdriver.Chrome("C:\\Users\\JC 

WIN10\\PycharmProjects\\BitefightPvpBOT\\drivers\\chromedriver.exe")

driver.set_page_load_timeout(10)
driver.get("https://s9-en.bitefight.gameforge.com/user/login")  # SERVER 
LOGIN PAGE

driver.find_element_by_name("user").send_keys("testaccount123")  # USERNAME
time.sleep(1)
driver.find_element_by_name("pass").send_keys("python123")  # PASSWORD
time.sleep(1)
driver.find_element_by_class_name("btn-small").click()  # LOGIN BUTTON
time.sleep(1)

driver.get("https://s9-en.bitefight.gameforge.com/robbery/index") # HUNT PAGE
time.sleep(1)
driver.find_element_by_name("optionsearch").click() # Werewolf Hunt
time.sleep(2)

enemyLevel = int(driver.find_element_by_xpath('//td[.="Level:"]/following- 
sibling::td').text)
BV = int(driver.find_element_by_xpath('//td[.="Battle value:"]/following- 
sibling::td').text)
elem = driver.find_element_by_xpath('//div[@class="gold"]')
HP = re.search(r'(\d+\.\d+)\s+/', elem.text).group(1)
HP = int(HP.replace('.', ''))

while enemyLevel <= 1 and BV <= 51 and HP >= 8000:
        driver.find_element_by_xpath("//form/div/div/button").click() #Attack
        time.sleep(2)
        BattleReport = driver.find_element_by_id("reportResult")  # BATTLE REPORT
        print(BattleReport.text)  # OUTPUTS BATTLE REPORT
        time.sleep(2)
        print("------    ------")
        driver.get("https://s9-en.bitefight.gameforge.com/robbery/index")
        driver.find_element_by_name("optionsearch").click()  # Werewolf Hunt
        time.sleep(2)
else:
driver.find_element_by_name("optionsearch").click()
print("Finding new victim")

你看得出我很不擅长循环。我怎样才能最好地解决这个问题?我尝试了一个while循环,但除非我遗漏了什么,否则无法使它正常工作。你知道吗

谢谢并致以亲切的问候


Tags: namehttpscombytimedriversleepelement
1条回答
网友
1楼 · 发布于 2024-04-26 14:22:04

你的问题是你的else正在把你踢出循环。重构到while True,这将使您的程序保持运行。因此,请在下面复制大量代码以获得大部分完整的代码:

from selenium import webdriver
import time
import re

# login to your server here
# and set up driver

def get_new_enemy_stats(driver):
    # go to page to find enemy
    driver.get("https://s9-en.bitefight.gameforge.com/robbery/index") # HUNT PAGE
    time.sleep(1)
    driver.find_element_by_name("optionsearch").click() # Werewolf Hunt
    time.sleep(2)

    # get stats
    enemyLevel = int(driver.find_element_by_xpath('//td[.="Level:"]/following- 
    sibling::td').text)
    BV = int(driver.find_element_by_xpath('//td[.="Battle value:"]/following- 
    sibling::td').text)

    # return them
    return enemyLevel, BV


def get_health(driver):
    elem = driver.find_element_by_xpath('//div[@class="gold"]')
    HP = re.search(r'(\d+\.\d+)\s+/', elem.text).group(1)
    HP = int(HP.replace('.', ''))
    return HP

while True:
    enemyLevel, BV = get_new_enemy_stats(driver)
    if enemyLevel > 1 or BV >51:
        # The stats are too high
        continue

    # do the attack
    HP = get_hp(driver)
    if HP<8000:
        # sleep_some

所以我所做的就是把敌人的统计数据放到一个函数中。这使您的代码更加紧凑,更加可读。当你需要一个新的敌人时,你想得到新的数据。你知道吗

返回stats,检查enemyLevelBP。如果这些测试失败,continue将跳过其余的代码并执行另一次while迭代。你可以检查你的HP在最后,如果它太低,你可以睡觉

while循环中的else不包含在循环中。它的功能类似于“做这个,做那个,否则,做别的”。这就是为什么您的循环正在退出,而您的脚本将完成

相关问题 更多 >