import time import requests import traceback import random from flask import jsonify from bs4 import BeautifulSoup from selenium import webdriver from selenium.common.exceptions import TimeoutException,NoSuchElementException from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.support.wait import WebDriverWait from Basic.helper import read_proxies from Basic.log_manager import get_logging from Basic.add_remove_text import remove_and_insert_text from Basic.helper import get_current_datetime from Basic.helper import check_access_denied from Basic.send_email import send_email def recent_report(email, password, ssn): logger = get_logging() all_proxies = read_proxies() proxy_address = random.choice(all_proxies) print("proxy_address:---", proxy_address) try: url = "https://member.identityiq.com/" chrome_path = "/usr/lib/chromium-browser/chromedriver" # chrome_local_path = "D:\\scrapper\\chromedriver_win32\\chromedriver.exe" chrome_local_path = "D:\\scrapper\\chromedriver_win64\\chromedriver.exe" option = webdriver.ChromeOptions() option.add_argument(f'--proxy-server={proxy_address}') option.add_argument('--headless') # Run Chrome in headless mode option.add_argument('--disable-gpu') # Disable GPU acceleration option.add_argument('--no-sandbox') # Bypass OS security model option.add_argument('--disable-dev-shm-usage') # Overcome limited resource problems driver = webdriver.Chrome(chrome_path,options=option) #driver = webdriver.Chrome(chrome_local_path,options=option) #phantomjs_server_path = "/usr/local/share/phantomjs-2.1.1-linux-x86_64/bin/phantomjs" phantomjs_local_path = "D:\\scrapper\\phantomjs-2.1.1-windows\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe" #driver = webdriver.PhantomJS(executable_path= phantomjs_server_path,service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any']) #driver = webdriver.PhantomJS(executable_path= phantomjs_local_path) driver.get(url + 'login.aspx') #driver.save_screenshot("server_screenshot_login.png") driver.implicitly_wait(10) try: driver.find_element_by_id("close-pc-btn-handler").click() except: pass driver.find_element_by_id('txtUsername').send_keys(email) driver.find_element_by_id('txtPassword').send_keys(password) driver.find_element_by_id("imgBtnLogin").click() timeout = 120 time.sleep(5) try: ele_acc_lock = driver.find_element(By.CLASS_NAME, "chakra-modal__header") error_text = ele_acc_lock.text driver.quit() response = {"page":'login.aspx', "ip":proxy_address, "status_code": 1003, "page_code":200, "data": "ACCOUNT_LOCKED"} return jsonify(response) except: element_login = driver.find_element(By.CLASS_NAME, "chakra-text") if element_login.text == 'Invalid login attempt': driver.quit() response = {"page":'login.aspx', "ip":proxy_address, "status_code":1002 ,"page_code":200, "data": "INVALID_LOGIN"} return jsonify(response) try: wait = WebDriverWait(driver, timeout) WebDriverWait(driver, timeout).until( ec.url_to_be(url + 'security-question') or ec.url_to_be(url + 'Dashboard.aspx') ) wait.until( lambda driver: driver.current_url != (url + 'security-question') or (url + 'Dashboard.aspx') ) if driver.current_url == url + 'security-question': #driver.save_screenshot("server_screenshot_security_question.png") element_present = ec.presence_of_element_located( (By.NAME, 'userSecurityAnswer') ) WebDriverWait(driver, timeout).until(element_present) driver.find_element_by_name('userSecurityAnswer').send_keys(ssn) driver.find_element_by_id("FBfbforcechangesecurityanswer_ibtSubmit").click() #element_present = ec.presence_of_element_located((By.ID, 'hdnMemberID')) #WebDriverWait(driver, timeout).until(element_present) driver.get(url + 'Dashboard.aspx') #print('Dashboard success') if driver.current_url == url + 'Dashboard.aspx': response = requests.get(url + 'Dashboard.aspx') if response.status_code == 200: print("Access successful!") elif response.status_code == 403: print("Access forbidden. Your IP might be blocked.") elif response.status_code == 401: print("Unauthorized. You may need to log in.") else: print(f"Received status code {response.status_code}. Something") #driver.save_screenshot("server_screenshot_security_Dashboard.png") driver.get(url + 'CreditReport.aspx') #print('CreditReport success') #driver.save_screenshot("server_screenshot_CreditReport.png") try: element_present = ec.presence_of_element_located((By.ID, 'reportTop')) WebDriverWait(driver, timeout).until(element_present) #driver.save_screenshot("server_screenshot_final.png") #print('element_present success') except: pass #print('element not present') driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #driver.save_screenshot("server_screenshot_final.png") xpath_value = '' try: driver.find_element_by_xpath("//b[contains(., '***SECURITY FREEZE')]") xpath_value = '//*[@id="ctrlCreditReport"]/transunion-report/div[2]/div[10]/div[2]/address-history/div/ng-repeat[1]' except NoSuchElementException: xpath_value = '//*[@id="ctrlCreditReport"]/transunion-report/div[2]/div[9]/div[2]/address-history/div/ng-repeat[1]' try: element_present = ec.presence_of_element_located(( By.XPATH,xpath_value)) WebDriverWait(driver, timeout).until(element_present) except TimeoutException: pass last_height = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(5) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height element = driver.find_element(By.ID, "ctrlCreditReport") soup = BeautifulSoup(str(element.get_attribute('outerHTML')), 'lxml') driver.quit() soup.html.insert(0, soup.new_tag('head')) target = soup.find('head') css_list = ''' ''' target.insert(0, BeautifulSoup(css_list, 'lxml').find('head')) for div in soup.findAll('div', {'class': "link_header"}): div.decompose() for span in soup.findAll('span', {'class': "return_topSpan"}): span.decompose() for img in soup.findAll('img'): img['src'] = 'https://www.member.identityiq.com' + str(img['src']) response = { "ip":proxy_address, "page_code":200, "page":"CreditReport.aspx", "status_code":200, "data": soup.prettify()} return jsonify(response) driver.quit() response = {"page":'security-question.aspx', "ip":proxy_address, "page_code":403, "status_code":405, "data": "ERROR"} return jsonify(response) except TimeoutException: traceback.print_exc() logger.error("email: "+email+ " "+traceback.format_exc()) result = check_access_denied(url+ 'CreditReport.aspx') subject = f"RTG-IQ-IP {proxy_address} is Blocked on CreditReport.aspx page error_code:{result}" if(result == 403): remove_and_insert_text(proxy_address) send_email(subject, get_current_datetime() + " "+ email +" "+traceback.format_exc()) driver.quit() #return traceback.format_exc() response = {"page":'CreditReport.aspx', "ip":proxy_address, "page_code":result, "status_code":408, "data": "TIME_OUT"} return jsonify(response) except Exception : logger.error("email: "+email+ " "+traceback.format_exc()) traceback.print_exc() result = check_access_denied(url+ 'login.aspx') subject = f"RTG-IQ-IP {proxy_address} is Blocked on login.aspx page error_code:{result}" if(result == 403): remove_and_insert_text(proxy_address) send_email(subject, get_current_datetime() + " "+ email +" "+traceback.format_exc()) driver.quit() #return traceback.format_exc() response = {"page":'login.aspx', "ip":proxy_address, "page_code":result, "status_code":404, "data": "ERROR"} return jsonify(response)