231 lines
10 KiB
Python
231 lines
10 KiB
Python
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 = '''
|
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
|
|
rel="stylesheet" />
|
|
<link href="https://member.identityiq.com/CreditReportContent/DEFAULT/style.DEFAULT.css"
|
|
rel="stylesheet" />
|
|
<link href="https://member.identityiq.com/css/CRDownload.css" rel="stylesheet" />
|
|
<script src="https://member.identityiq.com/Scripts/jquery-3.6.0.min.js" type="text/javascript"></script>
|
|
<script src="https://member.identityiq.com/Scripts/angular.js" type="text/javascript" ></script>
|
|
<script src="https://member.identityiq.com/Scripts/CRDownload.js" type="text/javascript" ></script>
|
|
'''
|
|
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)
|
|
|