Giter Club home page Giter Club logo
# Necessary imports



# Initialize 2Captcha solver with your API key
solver = TwoCaptcha('Your api key')

app = Flask(__name__)

time_interval = 0.0001 
titles = [
    '504 Gateway Time-out', '403 Forbidden', 'Problem loading page', '503 Service Temporarily Unavailable', 
    'Service Unavailable', '500 Internal Server Error', 'Database error', 'FastCGI Error', 
    'The connection has timed out', 'Problemas al cargar la página', 'Error 502 (Server Error)!!1'
]
heading_texts = [
    '502 Bad Gateway', 'Service Unavailable', '403 ERROR', 'Error 503 Service Unavailable', 
    '404 Not Found', '504 Gateway Time-out', 'This page isn’t working'
]
my_body = ['Scheduled maintenance is under progress']

def refresh_if_needed(driver):
    my_title = driver.title
    if len(driver.find_elements(By.TAG_NAME, 'body')[0].find_elements(By.XPATH, "./*")) <= 1 or my_title in titles:
        print("Error detected in title. Refreshing...")
        time.sleep(time_interval)
        driver.refresh()
    else:
        h1_elements = driver.find_elements(By.TAG_NAME, 'h1')
        if h1_elements and h1_elements[0].text in heading_texts:
            print("Error detected in heading text. Refreshing...")
            time.sleep(time_interval)
            driver.refresh()

def check_and_click_available_date(driver):
    while True:
        try:
            refresh_if_needed(driver)
            # Wait for the datepicker to be vis
            EC.visibility_of_element_located((By.CLASS_NAME, "datepicker-days"))
            

            # Get all date elements in the datepicker
            date_elements = driver.find_elements(By.XPATH, "//td[contains(@class, 'day')]")

            for date_element in date_elements:
                if "disabled" not in date_element.get_attribute("class"):
                    date_element.click()
                    print("Available date clicked")
                    return
                
        except Exception as e:
            print(f"An error occurred: {e}")
            driver.refresh()
            print("No available dates found. Retrying...")
        time.sleep(0.2)  # Wait before retrying

def solve_captcha(captcha_element):
    captcha_src = captcha_element.get_attribute('src')
    result = solver.normal(captcha_src)
    return result['code']

def solve_recaptcha(site_key, url):
    result = solver.recaptcha(sitekey=site_key, url=url)
    return result['code']

def click_element_with_retry(driver, by, value):
    while True:
        try:
            refresh_if_needed(driver)
            element = WebDriverWait(driver, 0.2).until(
                EC.element_to_be_clickable((by, value))
            )
            element.click()
            return
        except Exception as e:
            print(f"Click failed: {e}. Retrying...")
            

@app.route('/', methods=['GET', 'POST'])
def main():
    if request.method == 'POST':
        first_name = request.form['first_name']
        last_name = request.form['last_name']
        username = request.form['username']
        password = request.form['password']
        application_centre = request.form['application_centre']
        service_type = request.form['service_type']
        applicant_type = request.form['applicant_type']
        card = request.form['card']
        

        while True:
            driver = webdriver.Chrome()
            driver.get("https://blsitalypakistan.com/account/login")

            try:
                refresh_if_needed(driver)
                login_try = False
                while not login_try:
                    driver.find_element(By.XPATH, "//input[@placeholder='Enter Email']").send_keys(username)
                    driver.find_element(By.XPATH, "//input[@placeholder='Enter Password']").send_keys(password)
                    captcha_element = driver.find_element(By.XPATH, "/html/body/div[6]/div/div/div/div/div[2]/form/div[5]/img")
                    captcha_code = solve_captcha(captcha_element)
                    driver.find_element(By.XPATH, "/html/body/div[6]/div/div/div/div/div[2]/form/div[6]/input").send_keys(captcha_code)
                    driver.find_element(By.XPATH, "/html/body/div[6]/div/div/div/div/div[2]/form/div[8]/button").click()
                    if(driver.current_url == "https://blsitalypakistan.com/account/login"):
                        driver.refresh()
                    if(driver.current_url == "https://blsitalypakistan.com/account/account_details"):
                        login_try = True
                    
                
                refresh_if_needed(driver)
                driver.find_element(By.XPATH, "/html/body/div[5]/div/div/div[1]/div/ul/li[4]/a").click()
                
                #click_element_with_retry(driver, By.NAME, "/html/body/div[6]/a/img")

                if application_centre == "Islamabad":
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[13]/div/div/div[2]/div/form/div[1]/select/option[2]")
                    click_element_with_retry(driver, By.NAME, "valCenterLocationTypeId")
                    click_element_with_retry(driver, By.XPATH, "//html/body/div[11]/div/div/div[2]/div/form/div[2]/select/option[9]")
                if application_centre == "Lahore":
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[13]/div/div/div[2]/div/form/div[1]/select/option[3]")
                    click_element_with_retry(driver, By.NAME, "valCenterLocationTypeId")
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[2]/select/option[5]")
                if application_centre == "Faisalabad":
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[13]/div/div/div[2]/div/form/div[1]/select/option[5]")
                    click_element_with_retry(driver, By.NAME, "valCenterLocationTypeId")
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[2]/select/option[4]") 
                if application_centre == "Multan":
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[13]/div/div/div[2]/div/form/div[1]/select/option[6]")
                    click_element_with_retry(driver, By.NAME, "valCenterLocationTypeId")
                    click_element_with_retry(driver, By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[2]/select/option[4]") 
                refresh_if_needed(driver)
                click_element_with_retry(driver, By.NAME, "valAppointmentForMembers")
                click_element_with_retry(driver, By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[3]/select/option[2]")
                refresh_if_needed(driver)
                boom = True
                while boom:
                    try:
                        # Locate captcha element and solve it
                        captcha_element = driver.find_element(By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[4]/div/img")
                        captcha_code = solve_captcha(captcha_element)
                        driver.find_element(By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[5]/input").send_keys(captcha_code)
        
                        # Click the element to open the date picker
                        click_element_with_retry(driver, By.NAME, "valAppointmentDate")
        
                        # Wait for the date picker to be visible
                        WebDriverWait(driver, 0.002).until(
                            EC.visibility_of_element_located((By.CLASS_NAME, "datepicker-days"))
                            )

                        # Get all date elements in the date picker
                        date_elements = driver.find_elements(By.XPATH, "//td[contains(@class, 'day')]")

                        for date_element in date_elements:
                            if "disabled" not in date_element.get_attribute("class"):
                                date_element.click()
                                print("Available date clicked")
                                boom = False  # Exit the loop once a date is clicked
                        if(not driver.find_element(By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[8]/div/select/option[2]")):
                            driver.refresh()  
        
                        if boom:  # If no available date is clicked, refresh the page and try again
                            print("No available dates found. Retrying...")
                            driver.refresh()
                        

                    except :
                        
                        print("Retrying due to error...")
                    
                    
                            
                        
                    
                click_element_with_retry(driver, By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[8]/div/select/option[2]")
                driver.find_element(By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[9]/div[5]/input").send_keys(first_name)
                    
                driver.find_element(By.XPATH, "/html/body/div[11]/div/div/div[2]/div/form/div[9]/div[6]/input").send_keys(last_name)

                    

                    # Solve reCAPTCHA v2
                    #recaptcha code not working?help in python code?
                site_key = "6LcQb8klAAAAAHDDKtB3PaB6gvbh-ej4qa8BRKV9"
                url = driver.current_url
                recaptcha_response = solve_recaptcha(site_key, url)
                driver.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML = "{recaptcha_response}";')
                driver.find_element(By.XPATH ,"/html/body/div[11]/div/div/div[2]/div/form/div[9]/p/input").click()
                driver.find_element(By.XPATH ,"/html/body/div[11]/div/div/div[2]/div/form/div[9]/div[11]/button").click()
                
                if(driver.find_element(By.XPATH , "/html/body/div[1]/div/div[2]/div[1]/div[2]/div/h1")):
                    driver.find_element(By. XPATH, "/html/body/div[1]/div/div[2]/div[1]/form/div[5]/div[3]/div[1]/div[1]/input").send_keys(card)
                    driver.find_element(By.XPATH, "/html/body/div[1]/div/div[2]/div[1]/form/div[5]/div[3]/div[2]/div[1]/div/ul/li[6]/span").click
                    driver.find_element(By.XPATH , "/html/body/div[1]/div/div[2]/div[1]/form/div[5]/div[3]/div[2]/div[2]/div/ul/li[4]/span").click()
                # code for card details
                   
               
            except Exception as e:
                print(f"An error occurred: {e}")
            finally:
                time.sleep(160)  # Pause before restarting
                

    return render_template_string('''
        <h1>Book Appointment</h1>
        <form method="post">
            <label for="first_name">First Name:</label><br>
            <input type="text" id="first_name" name="first_name"><br>
            <label for="last_name">Last Name:</label><br>
            <input type="text" id="last_name" name="last_name"><br>
            <label for="username">Username:</label><br>
            <input type="text" id="username" name="username"><br>
            <label for="password">Password:</label><br>
            <input type="password" id="password" name="password"><br>
            <label for="application_centre">Application Centre:</label><br>
            <select id="application_centre" name="application_centre">
                <option value="Islamabad">Islamabad</option>
                <option value="Lahore">Lahore</option>
                <option value="Faisalabad">Faisalabad</option>
                <option value="Multan">Multan</option>
            </select><br>
            <label for="service_type">Service Type:</label><br>
            <select id="service_type" name="service_type">
                <option value="National - work">National - work</option>
                <option value="National Family reunion">National Family reunion</option>
            </select><br>
            <label for="applicant_type">Applicant Type:</label><br>
            <select id="applicant_type" name="applicant_type">
                <option value="Individual">Individual</option>
            </select><br>
            <label for="card">card:</label><br>
            <input type="numbers" id="card" name="card"><br>
            </select><br>
            <input type="submit" value="Book Now">
            
        </form>
    ''')

if __name__ == '__main__':
    app.run(debug=True)

virus06-r's Projects

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.