opne-beta

This commit is contained in:
Bedir Tuğra Karaabalı 2024-08-10 15:27:15 +02:00
commit b3e654691e
16 changed files with 1121 additions and 0 deletions

103
.gitignore vendored Normal file
View File

@ -0,0 +1,103 @@
# Sanal ortam
venv/
.venv/
env/
.env/
*.env
myenv/
.myenv/
myenv/
*.myenv
myenv
# PyCharm ve diğer IDE'lere özgü dosyalar
.idea/
*.iml
# Python bytecode dosyaları
__pycache__/
*.pyc
*.pyo
*.pyd
# Diğer geçici dosyalar
*.log
*.tmp
#accounts
*.txt
# Python bytecode dosyaları
__pycache__/
*.pyc
*.pyo
*.pyd
# Sanal ortam klasörleri
venv/
.env/
.venv/
ENV/
env/
venv.bak/
# Pipenv dosyaları
Pipfile.lock
# Python distribütörleri tarafından oluşturulan dosyalar
*.egg-info/
dist/
build/
.eggs/
# Test çıktıları
nosetests.xml
coverage.xml
*.cover
*.py,cover
*.hypothesis/
*.tox/
*.nox/
.coverage
.cache
*.log
# IDE/Editor dosyaları
.vscode/
.idea/
*.sublime-project
*.sublime-workspace
# Çeşitli geçici dosyalar
*.tmp
*.bak
*.swp
*.swo
# Jupyter Notebook dosyaları
.ipynb_checkpoints/
# Sistem dosyaları
.DS_Store
Thumbs.db
# PyCharm kullanıcı dosyaları
*.iml
.idea/
#---
DAFAM/__pycache__/
DAFAM/.qrcreator/
DAFAM/sources/DAFAM.pyproject
DAFAM/sources/DAFAM.pyproject.user
DAFAM/sources/form.ui
DAFAM/sources/form.ui.autosave
DAFAM/.qtcreator
*.ui
*.user
*.project
*.autosave
*.qtcreator

6
DAFAM/DAFAM.pyproject Normal file
View File

@ -0,0 +1,6 @@
{
"files": [
"mainwindow.py",
"form.ui"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

BIN
DAFAM/sources/compile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
DAFAM/sources/dafam.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
DAFAM/sources/diskette.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

315
DAFAM/ui_form.py Normal file
View File

@ -0,0 +1,315 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.7.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGraphicsView, QLabel, QListWidget,
QListWidgetItem, QMainWindow, QPlainTextEdit, QPushButton,
QSizePolicy, QStackedWidget, QStatusBar, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(1258, 631)
MainWindow.setStyleSheet(u"QMainWindow {\n"
" background:#003049;\n"
"}")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.stackedWidget = QStackedWidget(self.centralwidget)
self.stackedWidget.setObjectName(u"stackedWidget")
self.stackedWidget.setGeometry(QRect(10, 10, 1231, 581))
self.stackedWidget.setStyleSheet(u"QFrame {\n"
" background-color:#001d3d;\n"
" border-radius:10px;\n"
"}")
self.home_page = QWidget()
self.home_page.setObjectName(u"home_page")
self.home_list = QListWidget(self.home_page)
self.home_list.setObjectName(u"home_list")
self.home_list.setGeometry(QRect(160, 20, 451, 551))
self.home_list.setStyleSheet(u"QListWidget {\n"
" font: 800 11pt \"Ubuntu Sans\";\n"
" font: 500 11pt \"Ubuntu Sans\";\n"
" color: rgb(0, 0, 0);\n"
" background:rgb(255,255,255);\n"
" border-radius:20px;\n"
" text-align: center;\n"
"}\n"
"\n"
"QListWidget::item {\n"
" text-align:center;\n"
" color:black;\n"
" margin:5px;\n"
"\n"
"\n"
"}")
self.home_plain_text = QPlainTextEdit(self.home_page)
self.home_plain_text.setObjectName(u"home_plain_text")
self.home_plain_text.setGeometry(QRect(633, 29, 371, 161))
self.home_plain_text.setStyleSheet(u"QPlainTextEdit {\n"
"background-color:#001d3d;\n"
"color:white;\n"
"}")
self.home_save_button = QPushButton(self.home_page)
self.home_save_button.setObjectName(u"home_save_button")
self.home_save_button.setGeometry(QRect(1070, 50, 88, 26))
self.home_save_button.setStyleSheet(u"QPushButton {\n"
" background-color:white;\n"
" color:black;\n"
"}")
icon = QIcon()
icon.addFile(u"sources/diskette.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.home_save_button.setIcon(icon)
self.home_next_button = QPushButton(self.home_page)
self.home_next_button.setObjectName(u"home_next_button")
self.home_next_button.setGeometry(QRect(1070, 10, 88, 26))
self.home_next_button.setStyleSheet(u"QPushButton {\n"
" background-color:white;\n"
"}")
icon1 = QIcon()
icon1.addFile(u"sources/next_button.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.home_next_button.setIcon(icon1)
self.widget = QWidget(self.home_page)
self.widget.setObjectName(u"widget")
self.widget.setGeometry(QRect(10, 30, 141, 501))
self.widget.setStyleSheet(u"QWidget {\n"
" background-color:#003566;\n"
" border-radius:50px;\n"
"}")
self.home_widget_left = QWidget(self.widget)
self.home_widget_left.setObjectName(u"home_widget_left")
self.home_widget_left.setGeometry(QRect(10, 70, 121, 321))
self.home_widget_left.setLayoutDirection(Qt.LeftToRight)
self.home_widget_left.setAutoFillBackground(False)
self.home_widget_left.setStyleSheet(u"QWidget {\n"
" background:#fca311;\n"
" border-radius:10px;\n"
"}\n"
"\n"
"")
self.home_show_account = QPushButton(self.home_widget_left)
self.home_show_account.setObjectName(u"home_show_account")
self.home_show_account.setGeometry(QRect(10, 70, 88, 26))
self.home_show_account.setStyleSheet(u"QPushButton {\n"
" background-color: #003566;\n"
" color: rgb(255, 255, 255);\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: rgb(246, 211, 45);\n"
" color:#003566;\n"
"}")
self.home_show_account.setAutoDefault(True)
self.label = QLabel(self.home_widget_left)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(20, 30, 81, 18))
self.label.setStyleSheet(u"QLabel {\n"
" color:rgb(255,255,255);\n"
"}\n"
"QLabel:hover {\n"
" \n"
" color: rgb(26, 95, 180);\n"
" font: 600 15pt \"Ubuntu Sans\";\n"
" font-size:20pt;\n"
"}")
self.home_run = QPushButton(self.home_widget_left)
self.home_run.setObjectName(u"home_run")
self.home_run.setGeometry(QRect(10, 130, 88, 26))
self.home_run.setStyleSheet(u"QPushButton {\n"
" background-color: #003566;\n"
" color: rgb(255, 255, 255);\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: rgb(246, 211, 45);\n"
" color:#003566;\n"
"}")
self.graphicsView = QGraphicsView(self.home_page)
self.graphicsView.setObjectName(u"graphicsView")
self.graphicsView.setGeometry(QRect(640, 230, 341, 201))
self.graphicsView.setAutoFillBackground(False)
self.stackedWidget.addWidget(self.home_page)
self.widget.raise_()
self.home_list.raise_()
self.home_plain_text.raise_()
self.home_save_button.raise_()
self.home_next_button.raise_()
self.graphicsView.raise_()
self.code_page = QWidget()
self.code_page.setObjectName(u"code_page")
self.code_code_label = QPlainTextEdit(self.code_page)
self.code_code_label.setObjectName(u"code_code_label")
self.code_code_label.setGeometry(QRect(10, 10, 561, 551))
self.code_code_label.setStyleSheet(u"QPlainTextEdit \n"
"{\n"
" background-color:white;\n"
" color:black;\n"
" border-radius:10px;\n"
" font: 600 12pt \"Ubuntu Sans\";\n"
"}\n"
"")
self.code_save_button = QPushButton(self.code_page)
self.code_save_button.setObjectName(u"code_save_button")
self.code_save_button.setGeometry(QRect(990, 20, 88, 26))
self.code_save_button.setStyleSheet(u"QPushButton {\n"
" background-color: white;\n"
" color: black;\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: black;\n"
" color:white;\n"
"}")
self.code_file_open = QPushButton(self.code_page)
self.code_file_open.setObjectName(u"code_file_open")
self.code_file_open.setGeometry(QRect(990, 60, 88, 26))
self.code_file_open.setStyleSheet(u"QPushButton {\n"
" background-color: white;\n"
" color: black;\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: black;\n"
" color:white;\n"
"}")
self.code_info_label = QLabel(self.code_page)
self.code_info_label.setObjectName(u"code_info_label")
self.code_info_label.setGeometry(QRect(600, 270, 601, 291))
self.code_info_label.setStyleSheet(u"QLabel \n"
"{\n"
" background-color:white;\n"
" color:black;\n"
" border-radius:10px;\n"
" font: 600 12pt \"Ubuntu Sans\";\n"
"}\n"
"")
self.code_back_button = QPushButton(self.code_page)
self.code_back_button.setObjectName(u"code_back_button")
self.code_back_button.setGeometry(QRect(1100, 20, 88, 26))
self.code_back_button.setStyleSheet(u"QPushButton {\n"
" background-color:white;\n"
"}")
icon2 = QIcon()
icon2.addFile(u"sources/back-button.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.code_back_button.setIcon(icon2)
self.code_run_button = QPushButton(self.code_page)
self.code_run_button.setObjectName(u"code_run_button")
self.code_run_button.setGeometry(QRect(990, 120, 88, 71))
self.code_run_button.setStyleSheet(u"QPushButton {\n"
" background-color: white;\n"
" color: black;\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: black;\n"
" color:white;\n"
"}")
self.code_generate_button = QPushButton(self.code_page)
self.code_generate_button.setObjectName(u"code_generate_button")
self.code_generate_button.setGeometry(QRect(730, 230, 88, 26))
self.code_generate_button.setStyleSheet(u"QPushButton {\n"
" background-color: white;\n"
" color: black;\n"
" font: 600 11pt \"URW Bookman\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" \n"
" background-color: black;\n"
" color:white;\n"
"}")
self.code_prompt = QPlainTextEdit(self.code_page)
self.code_prompt.setObjectName(u"code_prompt")
self.code_prompt.setGeometry(QRect(603, 150, 351, 70))
self.code_prompt.setStyleSheet(u"QPlainTextEdit \n"
"{\n"
" background-color:white;\n"
" color:black;\n"
" border-radius:10px;\n"
" font: 600 12pt \"Ubuntu Sans\";\n"
"}\n"
"")
self.plainTextEdit = QPlainTextEdit(self.code_page)
self.plainTextEdit.setObjectName(u"plainTextEdit")
self.plainTextEdit.setGeometry(QRect(603, 10, 341, 121))
self.plainTextEdit.setStyleSheet(u"QPlainTextEdit {\n"
" background-color:white;\n"
" border-radius:2px;\n"
" color:black;\n"
"}")
self.stackedWidget.addWidget(self.code_page)
self.page_2 = QWidget()
self.page_2.setObjectName(u"page_2")
self.stackedWidget.addWidget(self.page_2)
self.code_notif = QLabel(self.centralwidget)
self.code_notif.setObjectName(u"code_notif")
self.code_notif.setGeometry(QRect(500, 590, 281, 18))
self.code_notif.setStyleSheet(u"QLabel \n"
"{\n"
" color:white;\n"
" border-radius:10px;\n"
" font: 600 12pt \"Ubuntu Sans\";\n"
"}\n"
"")
self.widget_2 = QWidget(self.centralwidget)
self.widget_2.setObjectName(u"widget_2")
self.widget_2.setGeometry(QRect(70, 600, 1101, 71))
self.widget_2.setStyleSheet(u"QWidget {\n"
"background-color:#fca311;\n"
"border-radius:20px;\n"
"}")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.stackedWidget.setCurrentIndex(1)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.home_save_button.setText(QCoreApplication.translate("MainWindow", u" save", None))
self.home_next_button.setText("")
self.home_show_account.setText(QCoreApplication.translate("MainWindow", u"show", None))
self.label.setText(QCoreApplication.translate("MainWindow", u"ACCOUNTS", None))
self.home_run.setText(QCoreApplication.translate("MainWindow", u"run", None))
self.code_code_label.setPlainText(QCoreApplication.translate("MainWindow", u"code is here", None))
self.code_save_button.setText(QCoreApplication.translate("MainWindow", u"kaydet", None))
self.code_file_open.setText(QCoreApplication.translate("MainWindow", u"dosya a\u00e7", None))
self.code_info_label.setText("")
self.code_back_button.setText("")
self.code_run_button.setText(QCoreApplication.translate("MainWindow", u"\u00e7al\u0131\u015ft\u0131r", None))
self.code_generate_button.setText(QCoreApplication.translate("MainWindow", u"\u00fcret", None))
self.code_prompt.setPlainText(QCoreApplication.translate("MainWindow", u"(prompt) >> ", None))
self.code_notif.setText("")
# retranslateUi

47
PreDefAlgs.py Normal file
View File

@ -0,0 +1,47 @@
from login import TrustPilot
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
class Algoritma():
def __init__ (self, link, type, proxy = None):
self.platform = TrustPilot(link, type, proxy)
self.email = ''
self.passwd = ''
def __setitem__(self, key, value):
if key == 'email': self.email = value
elif key == 'passwd': self.passwd = value
def click(self, timeout, type, value):
self.platform.find_and_click(timeout, type, value)
def fill(self, timeout, type, value, text, num):
self.platform.find_and_fill(timeout, type, value, text, num)
def start(self):
#that scenario is already created for programmer and not will be change
mail = "https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=157&ct=1722797878&rver=7.0.6738.0&wp=MBI_SSL&wreply=https%3a%2f%2foutlook.live.com%2fowa%2f%3fnlp%3d1%26cobrandid%3dab0455a0-8d03-46b9-b18b-df2f57b9e44c%26culture%3den-us%26country%3dus%26RpsCsrfState%3dc34ac037-be32-3b76-76f2-2cc383370e56&id=292841&aadredir=1&whr=outlook.de&CBCXT=out&lw=1&fl=dob%2cflname%2cwld&cobrandid=ab0455a0-8d03-46b9-b18b-df2f57b9e44c"
self.platform.find_and_click(10,'css', "span.typography_body-l__KUYFJ.typography_appearance-action__9NNRY.link_link__IZzHN.link_underlined__OXYVM")
time.sleep(.7)
self.platform.find_and_fill(10, 'id', "email-lookup",f"{self.email}",Keys.RETURN)
self.platform.add_page(mail)
self.platform.pages_to(1)
self.platform.find_and_fill(10, 'name', "loginfmt", f"{self.email}", Keys.RETURN)
self.platform.find_and_fill(10, 'name', "passwd", f"{self.passwd}", Keys.RETURN)
self.platform.find_and_click(10,'id', "acceptButton")
self.platform.active_element_click()
time.sleep(0.5)
self.platform.get_knowledge('class', "JdFsz")
self.platform.home()
self.platform.find_and_fill(10, 'id', "verification-code-input", self.platform.result)
time.sleep(2)
self.platform.end()

26
comments.py Normal file
View File

@ -0,0 +1,26 @@
import google.generativeai as genai
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('GEMINI_API_KEY')
class GEMINI:
def __init__(self, _api_key, _model_name):
self.api_key = _api_key
self.response = None
genai.configure(api_key=self.api_key)
self.model = genai.GenerativeModel(_model_name)
def set_text(self,_req_text):
self.response = self.model.generate_content(_req_text)
def get_text(self):
return self.response.text

56
decoder.py Normal file
View File

@ -0,0 +1,56 @@
from login import TrustPilot
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time, threading
from concurrent.futures import ThreadPoolExecutor
from logger import setup_logger
import logging
class AST:
def __init__ (self, all_lines):
self.all_lines = all_lines
self.lines = []
self._keys = {
"ok": "Keys.RETURN",
'none':"Keys.ENTER"
}
self.process_order = {}
self.base_code = """\n"""
self.special_keys = ['driver', 'bas', 'doldur']
def decode(self):
_split_lines = self.all_lines.split('\n')
for line in _split_lines:
line = str.strip(line)
words = line.split(' ')
""" driver
bas
doldur
yeni_sayfa
sayfa_degistir
aktif_elemana_tikla
eve_don
bilgi_al
"""
if words[0] not in self.special_keys:
return 0
elif words[0] in "driver":
self.base_code+=f"alg = Algoritma(link={words[1]}, type='{words[2]}')\ntime.sleep(0.5)\n"
elif words[0] in "bas":
self.base_code+=f"alg.click(10, '{words[1]}', {words[2]})\ntime.sleep(0.5)\n"
elif words[0] in "doldur":
self.base_code+=f"alg.fill(10, '{words[1]}', {words[2]}, {words[3]}, {self._keys[words[4]]})\n"

4
komutlar.dfm Normal file
View File

@ -0,0 +1,4 @@
driver 'https://lichess.org/login?referrer=/' chrome None
doldur id 'form3-username' 'merhaba' ok
doldur id 'form3-password' 'sifre' none
bas class 'box__top'

9
logger.py Normal file
View File

@ -0,0 +1,9 @@
import logging
def setup_logger():
logging.basicConfig(level=logging.DEBUG, # Log seviyesini belirleyin
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # Mesaj formatı
datefmt='%Y-%m-%d %H:%M:%S', # Tarih formatı
handlers=[logging.FileHandler('app.log' ,"w"), # Dosyaya loglama
logging.StreamHandler()])

305
login.py Normal file
View File

@ -0,0 +1,305 @@
""" This page created by Bedir Karaabali 04.08.2024
it's contain trustpilot and outlook.de login process. """
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException, WebDriverException
from logger import setup_logger
import time, re, logging
setup_logger()
logging.getLogger(__file__)
def find_clickable_content(func):
def wrapper(self, *args, **kwargs):
_driver = args[0]
_timeout = args[1]
_finder = args[3]
se_list = {
'0':By.ID,
'1':By.NAME,
'2':By.CSS_SELECTOR,
'3':By.CLASS_NAME
}
_selector = se_list[f'{args[2]}']
_req = (_selector, _finder)
logging.info("find_clickable_content basladi")
try:
_find_item = WebDriverWait(_driver, timeout=_timeout).until(
EC.element_to_be_clickable((_req))
)
_find_item.click()
except TimeoutException as t:
logging.error(f"time out {t} \n\n")
except NoSuchElementException as e:
logging.error(f"no element find {e}")
return func(self, *args, **kwargs)
return wrapper
def find_fillable_content(func):
def wrapper(self, *args, **kwargs):
_driver = args[0]
_timeout = args[1]
_finder = args[3]
se_list = {
'0':By.ID,
'1':By.NAME,
'2':By.CSS_SELECTOR,
'3':By.CLASS_NAME
}
_selector = se_list[f'{args[2]}']
_req = (_selector, _finder)
logging.info("find_fillable_content basladi")
try:
_find_item = WebDriverWait(_driver, timeout=_timeout).until(
EC.presence_of_element_located((_req))
)
for key, value in kwargs.items():
if value != None or value != '':
if hasattr(_find_item, 'send_keys'):
_find_item.send_keys(value)
else:
logging.error(f"{key} wrong process.")
except TimeoutException as t:
print(f"time out {t} \n\n")
logging.error(f"time out {_finder}")
except NoSuchElementException as e:
logging.error(f"no element find {e}")
return func(self, *args, **kwargs)
return wrapper
def get_knowledge(func):
def wrapper(self, *args, **kwargs):
_driver = args[0]
_timeout = args[1]
_finder = args[3]
se_list = {
'0':By.ID,
'1':By.NAME,
'2':By.CSS_SELECTOR,
'3':By.CLASS_NAME
}
_selector = se_list[f'{args[2]}']
_req = (_selector, _finder)
logging.info("get_knowledge basladi")
try:
_find_item = WebDriverWait(_driver, timeout=_timeout).until(
EC.presence_of_element_located((_req))
)
return _find_item.text
except TimeoutException as t:
logging.error(f"time out {t} \n\n")
except NoSuchElementException as e:
logging.error(f"element bulunamadi {_finder}")
return func(self, *args, **kwargs)
return wrapper
class TrustPilot:
def __init__(self, _main_link, _browser_type, _proxy:str) -> None:
self.current_page = 0
self.result = ''
self.proxy = _proxy
self.selectors = {
'id':0,
'name':1,
'css':2,
'class':3
}
self.pages = {}
self._link = _main_link
self._browser_type = _browser_type
self._web_driver = None
self._cookie_menagement = None
self.chrome_options = None
self.preprocess()
self.request_web_main_page(_main_link)
self.cookies_control()
self.pages_update()
def set_settings(self):
self.chrome_options = webdriver.ChromeOptions()
self.chrome_options.add_argument(f'--proxy-server={self.proxy}')
logging.info("proxy ayarlandi")
def extract_numbers(self, text):
numbers = re.findall(r'\d', text)
logging.info(f"onay sifresi elde edildi {numbers}")
return ''.join(numbers)
def pages_update(self):
pages = self._web_driver.window_handles
self.pages = {index: value for index, value in enumerate(pages)}
logging.info("sayfa degisti")
def preprocess(self):
self._web_driver = webdriver.Chrome(options=self.chrome_options) if self._browser_type == "chrome" else webdriver.Firefox() #now just 2 browser Google Chrome and FireFox
def request_web_main_page(self, link):
try:
self._web_driver.get(link)
time.sleep(.5)
except WebDriverException as w:
logging.error(f"Failed to get the page: {link}. Exception: {w}")
@find_clickable_content
def pass_cookie(self, driver, timeout, by, value):
pass
def cookies_control(self):
self._cookie_menagement = self._web_driver.get_cookies()
if self._cookie_menagement:
self.pass_cookie(self._web_driver, 10, self.selectors['id'], "onetrust-accept-btn-handler")
@find_clickable_content
def _find_and_click(self, driver, timeout, by, value):
pass
def find_and_click(self, timeout=10, by=None, value=None):
self._find_and_click(self._web_driver, timeout, self.selectors[f'{by}'], value)
@find_fillable_content
def _find_and_fill(self, driver, timeout, by, value, **kwargs):
pass
def find_and_fill(self, timeout=10, by=None, value=None, text='None', command=None):
if command != None: self._find_and_fill(self._web_driver,timeout, self.selectors[f'{by}'], value, text=text, command=command)
else :self._find_and_fill(self._web_driver,timeout, self.selectors[f'{by}'], value, text=text)
def add_page(self, link):
self._web_driver.execute_script(f"window.open('{link}');")
self.pages_update()
def pages_to(self, page_num):
self.current_page = page_num
self._web_driver.switch_to.window(f'{self._web_driver.window_handles[page_num]}')
def home(self):
self.pages_to(0)
self.current_page = 0
def active_element_click(self):
active_element = self._web_driver.execute_script("return document.activeElement;")
time.sleep(.9)
active_element.send_keys(Keys.ENTER)
@get_knowledge
def _get_knowledge(self, driver, timeout, by, value, **kwargs):
pass
def get_knowledge(self, by, value):
text = self._get_knowledge(self._web_driver, 10, self.selectors[f'{by}'], value)
self.result = self.extract_numbers(text)
def end(self):
logging.info("quiting")
self._web_driver.quit()
"""
class find_and_fill(object):
def __init__ (self, selector, value):
self.selector = selector
self.value = value
def __call__(self, driver):
element = driver.find_element(*self.selector)
if self.value in element.get_attribute('id'):
return element
else: return False
link = "https://trustpilot.com/users/connect?redirect=%2F&source_cta=header"
if __name__ == "__main__":
driver = webdriver.Chrome()
driver.get(link)
element = WebDriverWait(driver, 10).until(
find_and_fill((By.ID, 'input'), 'input')
)
print(element)
"""

245
mainwindow.py Normal file
View File

@ -0,0 +1,245 @@
# This Python file uses the following encoding: utf-8
from PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog, QGraphicsPixmapItem ,QGraphicsScene,QGraphicsView
from PySide6.QtGui import QPixmap, QIcon
from PySide6.QtCore import QTimer
from DAFAM.ui_form import Ui_MainWindow
import logging, sys, time
from concurrent.futures import ThreadPoolExecutor
from logger import setup_logger
from PreDefAlgs import Algoritma
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from decoder import AST
from comments import api_key, GEMINI
setup_logger() #logging configure
logger = logging.getLogger(__file__) #loggin - process
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.icon_path = "DAFAM//sources//"
self.setWindowTitle("DAFAM CONTROLLER")
self.setWindowIcon(QIcon(self.icon_path+"dafam.png"))
self._gemini_model = GEMINI(api_key, "gemini-1.5-flash") #api and name
self._definetions()#defs
self._icons_png() #fill the graphics
self.listen_states()#listen the buttons and events
def _icons_png(self):
_scene = self._return_scene(self.icon_path+"dafam.png", 300,200)
self.ui.graphicsView.setScene(_scene)
_icon = self._return_icon(self.icon_path+"next_button.png", 32,32)
self.ui.home_next_button.setIcon(_icon)
_icon = self._return_icon(self.icon_path+"back-button.png", 32,32)
self.ui.code_back_button.setIcon(_icon)
_icon = self._return_icon(self.icon_path+"diskette.png", 32,32)
self.ui.home_save_button.setIcon(_icon)
_icon = self._return_icon(self.icon_path+"compile.png", 54,54)
self.ui.code_run_button.setIcon(_icon)
def _definetions(self): #definations and self metods are there
self.model_path = "" #path veriables
self.schema = """email: {} passwd: {}""" #list view schema
self._accounts = [] #accounts infos
self.current_row_list = 0 #current list index
self.accounts_dic = {} # accounts infos but in dict
def _return_scene(self, _path, sizex, sizey):
image = QPixmap(_path)
resized = image.scaled(sizex,sizey)
item = QGraphicsPixmapItem(resized)
scene = QGraphicsScene()
scene.addItem(item)
return scene
def _return_icon(self, _path, sizex, sizey):
image = QPixmap(_path)
resized = image.scaled(sizex,sizey)
return resized
def _notif(self, _text): #use for notifications for page code
self.ui.code_notif.setText(_text)
self.ui.code_notif.setVisible(True)
QTimer.singleShot(2000,self._notif_clear) # 2000ms
def _notif_clear(self): #notification clear
self.ui.code_notif.setVisible(False)
def show_accounts(self): #for add accounts from accounts.txt
with open(f'{self.model_path}') as file:
lines = file.readlines()
for line in lines:
if len(lines) == 0:
continue
words = line.split(' : ')
words = [str.strip(word) for word in words]
if len(words) == 2 and len(words[0].split('@')) == 2:
if words[0].split('@')[1] == 'outlook.de': self.accounts_dic[f'{words[0]}'] = words[1]
# {'xxxxx@outlook.de' : 'passwd'}
_formatted = self.schema.format(words[0], words[1])
#'email: xxxx, passwd: xxxxx'
self._accounts.append(_formatted)
self.ui.home_list.addItems(self._accounts) #fill the list view
file.close()
def listen_states(self):
#---page home ----------
self.ui.home_next_button.clicked.connect(lambda: self.ui.stackedWidget.setCurrentIndex(1))
self.ui.home_show_account.clicked.connect(self.get_file) #fill the user list
self.ui.home_list.itemClicked.connect(self.item_clicked) #####
self.ui.home_save_button.clicked.connect(self.save_plain_text)
self.ui.home_run.clicked.connect(self.run)#run planned scenario
#--- icon
#----page code -----------
self.ui.code_back_button.clicked.connect(lambda :self.ui.stackedWidget.setCurrentIndex(0))
self.ui.code_file_open.clicked.connect(self.code_file_open)
self.ui.code_save_button.clicked.connect(self.code_file_save)
self.ui.code_run_button.clicked.connect(self.code_file_run)
self.ui.code_generate_button.clicked.connect(self.generate_comment)
#--------------------code run - save - open
#------generate GEMINI
def generate_comment(self):
_text = self.ui.code_prompt.toPlainText()
self._gemini_model.set_text(_text)
QTimer.singleShot(2000, self.fill_prompt_label)
def fill_prompt_label(self):
_text = self._gemini_model.get_text()
self.ui.plainTextEdit.setPlainText(_text)
#that is planned scenario pls don't change
def run(self):
link = "https://trustpilot.com/users/connect?redirect=%2F&source_cta=header"
#registed base scanerio
with ThreadPoolExecutor(max_workers=3) as executor:
# Her hesap için iş parçacığı oluştur ve çalıştır
for account in self.accounts_dic:
logging.info(f"names: {account}")
executor.submit(self.run_algorithm, account, link)
def run_algorithm(self, account, link):
logging.info(f"process established for {account} ")
proxy = "109.94.182.128:4145"
prog = Algoritma(link=link, type="chrome" , proxy=proxy)
prog['email'] = account
prog['passwd'] = self.accounts_dic[account]
prog.start()
#
def code_file_run(self):
self.code_file_save()
_text = self.ui.code_code_label.toPlainText()
#AST for decode .dfm
_ast = AST(_text)
#------------ get control about wrote code
_ast.decode()
print(_ast.base_code)
exec(_ast.base_code)
#----------------
def code_file_save(self):
try:
with open(self.model_path, "w") as _file:
_text = self.ui.code_code_label.toPlainText()
_file.write(_text)
self._notif("kaydedildi..")
except Exception as e:
logger.warning(f"{e}")
self._notif("bir dosya seçin")
def code_file_open(self):
self.model_path , _ = QFileDialog.getOpenFileName(self, 'code dosyası giriniz', '', '*.dfm')
with open(self.model_path) as file:
_read = file.read()
self.ui.code_code_label.setPlainText(_read)
file.close()
#---------------------------------------------------------------------------------------------------------
def save_plain_text(self):
_text = self.ui.home_plain_text.toPlainText()
try:
self._accounts.pop(self.current_row_list)
self._accounts.insert(self.current_row_list, _text)
self.ui.home_list.clear()
self.ui.home_list.addItems(self._accounts)
except Exception as e:
logger.warning(f"{e}")
self._notif(f'save işlemi gerçekleşmedi.')
def item_clicked(self, item):
_text = item.text()
self.current_row_list = self.ui.home_list.currentRow()
self.ui.home_plain_text.setPlainText(_text)
def get_file(self):
self.model_path, _ = QFileDialog.getOpenFileName(self, "bir kullanıcı dosyası seçin", ".txt")
self.show_accounts()
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = MainWindow()
widget.show()
sys.exit(app.exec())

5
take_info.py Normal file
View File

@ -0,0 +1,5 @@
""" this page created by Bedir Karaabali 05.08.2024
just support outlook.de accounts"""
import os