简体   繁体   中英

How to stop all code and go back to the beginning

I'm using selenium to register game account. And I use the api of the phone number rental service, but because there are too many users, some numbers will not be used. I used the if and elif methods so that when I receive the code, it will populate the web.

And I tried using start_time = time.time() to calculate if status more than 90 seconds still return 0 then stop whole code and run again from for loop, But 'return' stops only 'input_phone_number' function, not all functions. Here is the code I use:

def input_phone_number():
    while True:
        try:
            status_code = requests.get(f'https://api.viotp.com/session/getv2?requestId={request_id}&token={token}')
            code_data = status_code.json()['data']
            status = code_data['Status']
            code = code_data['Code']
            if status == 0:
                sleep(5) 
            elif status == 1:
                # Locate the element with the CSS selector '#code' and send the code as keyboard input
                driver.find_element(By.CSS_SELECTOR, '#code').send_keys(code)
                break


            if time.time() - start_time > 90:
                driver.close()
                return

And here is the original code:

for index, row in df.iterrows():
    Firstname = row['Fname']
    Lastname = row['Lname']
    Username = row['Username']
    Password = row['Password']
    
    def open_url():
        #code

    def input_information():
       #code

    def input_phone_number():
        response = requests.get(f'https://api.viotp.com/request/getv2?token={token}&serviceId=3')
        data = response.json()['data']
        number = data['phone_number']
        balance = data['balance']
        print('Phone Number:', number, '|', 'Balance:', balance)

        sleep(3)

        WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#phoneNumberId'))
        )
        driver.find_element(By.CSS_SELECTOR, '#phoneNumberId').send_keys(number)
        sleep(3)
        driver.find_element(By.CSS_SELECTOR, '#view_container > div > div > div.pwWryf.bxPAYd > div > div.zQJV3 > div > div.qhFLie > div > div > button > span').click()

        request_id = data['request_id']
        status = 0
        while status != 1:
            status_code = requests.get(f'https://api.viotp.com/session/getv2?requestId={request_id}&token={token}')
            code_data = status_code.json()['data']
            code = code_data['Code']
            status = code_data['Status']
            if status == 0:
                sleep(5)  # Sleep for 5 seconds before repeating the request
            elif status == 1:
                # Locate the element with the CSS selector '#code' and send the code as keyboard input
                driver.find_element(By.CSS_SELECTOR, '#code').send_keys(code)
        sleep(3)   
        driver.find_element(By.CSS_SELECTOR, '#view_container > div > div > div.pwWryf.bxPAYd > div > div.zQJV3 > div > div.qhFLie > div > div > button > span').click()

    def input_birthdate():
        #code
        
        

    open_url()
    input_information()
    input_phone_number()
    input_birthdate()

Can someone help me? Thanks very much!

What I would do is instead of returning nothing, I would return a string "continue" and after the call to input_phone_number() I would check if the return value is "continue", and if it is I would use continue to go to the next iteration of the for loop.

def input_phone_number():
    while True:
        try:
            status_code = requests.get(f'https://api.viotp.com/session/getv2?requestId={request_id}&token={token}')
            code_data = status_code.json()['data']
            status = code_data['Status']
            code = code_data['Code']
            if status == 0:
                sleep(5) 
            elif status == 1:
                # Locate the element with the CSS selector '#code' and send the code as keyboard input
                driver.find_element(By.CSS_SELECTOR, '#code').send_keys(code)
                break


            if time.time() - start_time > 90:
                driver.close()
                return "continue"
    open_url()
    input_information()
    result = input_phone_number()
    if result == "continue":
        continue
    input_birthdate()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM