Я использую бесконечный цикл для выполнения кода. Со временем это случится, например, переполнение стека? - PullRequest
0 голосов
/ 01 мая 2018

Я использую python selenium для автоматизации сайта, но я использую бесконечный цикл для выполнения кода. Со временем это произойдет, например, переполнение стека?

Я использовал селен в python и использовал бесконечные циклы в моем коде. Сначала у меня не было никаких проблем, но со временем я получил следующую ошибку. Что мне делать?

[13988:1284:0501/110015.734:ERROR:latency_info.cc(164)] Display::DrawAndSwap, 
LatencyInfo vector size 102 is too big.

Вот код

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
import time
n=1
driver=webdriver.Chrome('F:\pythonjiaoben\chromedriver_win32\chromedriver.exe')
driver.get('this is my web url')

def is_text(a):
    try:
        elem=driver.find_element_by_link_text(a)
        return True
    except:
        return False
def is_shuaxin():
    try:
        time.sleep(1)
        elem=driver.find_element_by_xpath("/html/body/p")
        elem=elem.text
        if re.match(r'您点击',elem):
            return True
        else:
            return False 
    except:
        print("我错了")
        return False
def is_chakan(sa):
    try:
        elem=driver.find_element_by_xpath("/html/body/p")
        elem=elem.text
        if re.findall(r'%s' % sa,elem):
            return True

        else:
            return False 
    except:
        return False

def gongji():
    while(n>0):
        if is_text("地狱之门[永恒]"):
            elem=driver.find_element_by_partial_link_text("地狱之门[永恒]")
            elem.click()
            time.sleep(1)
            continue

        if is_text("进入世界"):
            elem=driver.find_element_by_partial_link_text("进入世界")
            elem.click()
            time.sleep(1)
            continue
        if is_text("加曼迪拉") and is_chakan("横在炽热之路"):
            elem=driver.find_element_by_link_text("加曼迪拉")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("目标已经不在了"):
            elem=driver.find_element_by_link_text("返回游戏")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("火羽山的三个守护者之一"):
            elem=driver.find_element_by_link_text("攻击")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("准备"):
            elem=driver.find_element_by_link_text("察看")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("横在炽热之路"):
            elem=driver.find_element_by_link_text("察看")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("公墓"):
            fuhuo()
        if is_shuaxin():
            elem=driver.find_element_by_partial_link_text("返回游戏")
            elem.click()
            time.sleep(1)
            continue
        else:
            fuhuo()

def fuhuo():
    while(n>0):
        if is_chakan("超生"):
            elem=driver.find_element_by_link_text("信徒路(恢复)")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("大理石地面和纯白的廊柱"):
            elem=driver.find_element_by_link_text("恢复")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("南广场"):
            elem=driver.find_element_by_link_text("广场(传送)")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("牧师把手放在你的伤口上"):
            elem=driver.find_element_by_link_text("环顾四周")
            elem.click()
            time.sleep(1)
            elem=driver.find_element_by_link_text("广场(传送)")
            elem.click()
            time.sleep(1)
            continue

        if is_chakan("南集市"):
            elem=driver.find_element_by_link_text("集市(拍卖)")
            elem.click()
            time.sleep(1)
        if is_chakan("南铁匠铺"):
            elem=driver.find_element_by_partial_link_text("铁匠铺(修理)")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("装备凝练"):
            elem=driver.find_element_by_partial_link_text("修理")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("修理全部"):
            elem=driver.find_element_by_partial_link_text("*修理全部")
            elem.click()
            time.sleep(1)
            break
        if is_shuaxin():
            elem=driver.find_element_by_partial_link_text("返回游戏")
            elem.click()
            time.sleep(1)
            continue
        break
    chuansong()

def chuansong():
    while(n>0):
        if is_chakan("你花费"):
            elem=driver.find_element_by_partial_link_text("返回游戏")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("通灵坐骑装备合成"):
            elem=driver.find_element_by_link_text("地图")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("完成勇者之心任务"):
            elem=driver.find_element_by_link_text("时空转移")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("快速回城"):
            elem=driver.find_element_by_link_text("天火岩")
            elem.click()
            time.sleep(1)
            continue
        if is_chakan("挂机地图"):
            if is_text("开始挂机"):
                elem=driver.find_element_by_link_text("开始挂机")
                elem.click()
                time.sleep(1)
                continue
            else:
                if is_text("返回游戏"):
                    elem=driver.find_element_by_link_text("返回游戏")
                    elem.click()
                    time.sleep(1)
                    break
        if is_chakan("横在炽热之路上"):
            elem=driver.find_element_by_link_text("挂机")
            elem.click()
            time.sleep(1)
            continue
        if is_shuaxin():
            elem=driver.find_element_by_partial_link_text("返回游戏")
            elem.click()
            time.sleep(1)
            continue
        break
gongji()

Ну, я знаю, что код написан плохо, и я все еще изучаю его на начальном этапе, поэтому, если у вас есть какой-либо лучший способ изменить код, укажите это ниже. большое спасибо!

1 Ответ

0 голосов
/ 01 мая 2018

Если все в python, не должно быть проблем с переполнением стека / буфера. Держать бесконечный цикл должно быть в порядке.

Однако лучше всего использовать инструмент профилирования или просто отслеживать ресурсы, используемые вашим процессом от начала до конца.

...