add tesseract, db to gitignore, update lockfile, change code, add web component
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -8,3 +8,5 @@ wheels/
|
||||
|
||||
# Virtual environments
|
||||
.venv
|
||||
tesseract
|
||||
adis.db
|
||||
|
||||
115
main.py
115
main.py
@@ -1,64 +1,91 @@
|
||||
import keyboard
|
||||
from src.adischeck import is_adis_running, get_active_name, print_new_signature, adis_get_signature, adis_save_and_enter_exemplar, new_search, taskswitcher_name
|
||||
from src.adischeck import (
|
||||
is_adis_running,
|
||||
get_active_name,
|
||||
print_new_signature,
|
||||
adis_get_signature,
|
||||
adis_save_and_enter_exemplar,
|
||||
new_search,
|
||||
taskswitcher_name,
|
||||
get_mednr_exempl,
|
||||
enter_print_mode,
|
||||
exit_print_mode,
|
||||
)
|
||||
from src.adischeck_online import run, work_on_page
|
||||
import pyautogui
|
||||
from src.database import Database
|
||||
import time
|
||||
import sys
|
||||
import clipboard
|
||||
from playwright.sync_api import Playwright, sync_playwright, expect
|
||||
|
||||
|
||||
catalogue_pid = None
|
||||
print_pid = None
|
||||
|
||||
database = Database()
|
||||
page = run()
|
||||
|
||||
|
||||
def main():
|
||||
global catalogue_pid, print_pid
|
||||
if not is_adis_running():
|
||||
print("aDISCl is not running. Please start all required aDIS instances and try again.")
|
||||
return
|
||||
print("aDISCl is running. Proceeding to capture PIDs...")
|
||||
print("Press 'c' to capture the PID of the Catalogue aDIS instance.")
|
||||
keyboard.wait('c')
|
||||
#press backspace to clear any previous input
|
||||
catalogue_pid = get_active_name()
|
||||
print("Captured Catalogue PID:", catalogue_pid)
|
||||
pyautogui.hotkey("ctrl", "a") # Switch to the next aDIS instance
|
||||
pyautogui.hotkey("delete")
|
||||
# pyautogui.press("backspace")
|
||||
print("Press 'p' to capture the PID of the Print aDIS instance.")
|
||||
keyboard.wait('p')
|
||||
print_pid = get_active_name()
|
||||
print("Captured Print PID:", print_pid)
|
||||
pyautogui.hotkey("ctrl", "a") # Switch to the next aDIS instance
|
||||
pyautogui.hotkey("delete")
|
||||
|
||||
if catalogue_pid and print_pid:
|
||||
print("Both Catalogue and Print PIDs captured successfully.")
|
||||
print("Switching back to Catalogue aDIS instance...")
|
||||
taskswitcher_name(catalogue_pid) # Switch to Catalogue aDIS instance
|
||||
# pyautogui.hotkey("alt", "s") # Open the search dialog in Catalogue aDIS
|
||||
else:
|
||||
print("Failed to capture one or both PIDs. Please ensure you have the correct aDIS instances open.")
|
||||
print("Exiting the program.")
|
||||
sys.exit(1)
|
||||
# global catalogue_pid, print_pid
|
||||
# if not is_adis_running():
|
||||
# print("aDISCl is not running. Please start all required aDIS instances and try again.")
|
||||
# return
|
||||
# print("aDISCl is running. Proceeding to capture PIDs...")
|
||||
# print("Press 'c' to capture the PID of the Catalogue aDIS instance.")
|
||||
# keyboard.wait('c')
|
||||
# #press backspace to clear any previous input
|
||||
# catalogue_pid = get_active_name()
|
||||
# print("Captured Catalogue PID:", catalogue_pid)
|
||||
# pyautogui.hotkey("ctrl", "a") # Switch to the next aDIS instance
|
||||
# pyautogui.hotkey("delete")
|
||||
# # pyautogui.press("backspace")
|
||||
# print("Press 'p' to capture the PID of the Print aDIS instance.")
|
||||
# keyboard.wait('p')
|
||||
# print_pid = get_active_name()
|
||||
# print("Captured Print PID:", print_pid)
|
||||
# pyautogui.hotkey("ctrl", "a") # Switch to the next aDIS instance
|
||||
# pyautogui.hotkey("delete")
|
||||
|
||||
# if catalogue_pid and print_pid:
|
||||
# print("Both Catalogue and Print PIDs captured successfully.")
|
||||
# print("Switching back to Catalogue aDIS instance...")
|
||||
# taskswitcher_name(catalogue_pid) # Switch to Catalogue aDIS instance
|
||||
# pyautogui.press("up")
|
||||
# # pyautogui.hotkey("alt", "s") # Open the search dialog in Catalogue aDIS
|
||||
# else:
|
||||
# print("Failed to capture one or both PIDs. Please ensure you have the correct aDIS instances open.")
|
||||
# print("Exiting the program.")
|
||||
# sys.exit(1)
|
||||
print("Starting the script...")
|
||||
while True:
|
||||
keyboard.wait('space')
|
||||
print("Space key pressed. Switching to Catalogue aDIS instance...")
|
||||
time.sleep(5)
|
||||
text = adis_get_signature()
|
||||
new = database.insert_ma(text)
|
||||
clipboard.copy(new) # Copy the new signature to clipboard
|
||||
print(text, new)
|
||||
pyautogui.hotkey('ctrl', 'v') # Select all text
|
||||
mednr = adis_save_and_enter_exemplar(new) # Example usage with a new signature
|
||||
print("finished main work, printing new signature")
|
||||
mednr = get_mednr_exempl()
|
||||
print("Mednr:", mednr)
|
||||
|
||||
pyautogui.hotkey("alt", "s")
|
||||
work_on_page(page, mednr)
|
||||
enter_print_mode()
|
||||
pyautogui.press("space")
|
||||
time.sleep(1)
|
||||
print_new_signature(catalogue_pid, print_pid, mednr)
|
||||
new_search()
|
||||
exit_print_mode()
|
||||
# keyboard.wait('space')
|
||||
|
||||
# time.sleep(5)
|
||||
# text = adis_get_signature()
|
||||
# new = database.insert_ma(text)
|
||||
# clipboard.copy(new) # Copy the new signature to clipboard
|
||||
# print(text, new)
|
||||
# pyautogui.hotkey('ctrl', 'v') # Select all text
|
||||
# mednr = adis_save_and_enter_exemplar(new) # Example usage with a new signature
|
||||
# print("finished main work, printing new signature")
|
||||
# time.sleep(1)
|
||||
# print_new_signature(catalogue_pid, print_pid, mednr)
|
||||
# new_search()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
# time.sleep(5) # Wait for a few seconds before starting
|
||||
# print_new_signature("3 - PHFR: Katalog - aDIS/Client", "4 - PHFR(42): Exemplare - aDIS/Client", "004862920129")
|
||||
|
||||
# time.sleep(5) # Wait for a few seconds before starting
|
||||
# print_new_signature("3 - PHFR: Katalog - aDIS/Client", "4 - PHFR(42): Exemplare - aDIS/Client", "004862920129")
|
||||
@@ -6,10 +6,13 @@ readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"clipboard>=0.0.4",
|
||||
"getpixelcolor>=0.2.3",
|
||||
"keyboard>=0.13.5",
|
||||
"opencv-python>=4.11.0.86",
|
||||
"playwright>=1.52.0",
|
||||
"psutil>=7.0.0",
|
||||
"pyautogui>=0.9.54",
|
||||
"pyperclip>=1.9.0",
|
||||
"pytesseract>=0.3.13",
|
||||
"pywin32>=310",
|
||||
"winregistry>=2.1.1",
|
||||
|
||||
@@ -3,9 +3,12 @@ import psutil
|
||||
import pygetwindow
|
||||
import pyautogui
|
||||
import time
|
||||
import clipboard
|
||||
from src.cursor import classify_cursor, get_current_hcursor
|
||||
import pyperclip as clipboard
|
||||
import getpixelcolor
|
||||
import pytesseract
|
||||
# from src.cursor import classify_cursor, get_current_hcursor
|
||||
|
||||
pytesseract.pytesseract.tesseract_cmd = r".\tesseract\tesseract.exe"
|
||||
|
||||
def is_adis_running():
|
||||
|
||||
@@ -173,6 +176,7 @@ def print_new_signature(catalogue_name:str, print_name:str, mednr:str):
|
||||
pyautogui.press('space') # Simulate pressing space to print
|
||||
|
||||
#sleep as long as the cursor is not arrow, ibeam or hand
|
||||
time.sleep(2)
|
||||
while True:
|
||||
cursor = get_current_hcursor()
|
||||
cursor_name = classify_cursor(cursor)
|
||||
@@ -201,9 +205,51 @@ def new_search():
|
||||
|
||||
|
||||
|
||||
def get_mednr_exempl():
|
||||
keyboard.wait("space")
|
||||
time.sleep(3)
|
||||
while (
|
||||
pyautogui.locateOnScreen(
|
||||
"images/exemplar_ident.png", confidence=0.6, minSearchTime=1
|
||||
)
|
||||
is None
|
||||
):
|
||||
print("waiting")
|
||||
time.sleep(1)
|
||||
|
||||
return pytesseract.image_to_string(pyautogui.screenshot(region=(509, 357, 250, 25)))
|
||||
|
||||
|
||||
def enter_print_mode():
|
||||
pyautogui.keyDown("alt")
|
||||
pyautogui.press("b") # Open the search dialog in Catalogue aDIS
|
||||
pyautogui.press("d")
|
||||
pyautogui.keyUp("alt")
|
||||
time.sleep(5)
|
||||
if pyautogui.locateOnScreen("images/print_btns.png", confidence=0.8):
|
||||
pyautogui.press("space")
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def exit_print_mode():
|
||||
print("Exiting print mode...")
|
||||
time.sleep(2)
|
||||
while getpixelcolor.pixel(1240, 971) != (192, 215, 242):
|
||||
print("Not found")
|
||||
time.sleep(1)
|
||||
# while getpixelcolor.pixel(1240, 971) == (202, 202, 202):
|
||||
# time.sleep(1)
|
||||
# print("Process locked")
|
||||
# time.sleep(1)
|
||||
pyautogui.click(1240, 971) # Click the print button
|
||||
|
||||
print("Exited print mode.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
time.sleep(5) # Wait for a few seconds before starting
|
||||
# print("press space")
|
||||
# commit_changes()
|
||||
#new_search()
|
||||
get_click_locations()
|
||||
get_click_locations()
|
||||
# print(get_mednr_exempl())
|
||||
56
src/adischeck_online.py
Normal file
56
src/adischeck_online.py
Normal file
@@ -0,0 +1,56 @@
|
||||
|
||||
|
||||
|
||||
import re
|
||||
from playwright.sync_api import Playwright, sync_playwright, expect
|
||||
from src.database import Database
|
||||
import pyperclip as clipboard
|
||||
|
||||
import time
|
||||
def run():
|
||||
browser = sync_playwright().start().chromium.launch(headless=False)
|
||||
context = browser.new_context()
|
||||
page = context.new_page()
|
||||
page.goto("https://bsz.ibs-bw.de:22998/dap42")
|
||||
page.get_by_role("textbox", name="Benutzer").fill("phfr")
|
||||
page.get_by_role("textbox", name="Benutzer").press("Tab")
|
||||
page.get_by_role("textbox", name="Kennwort").fill("freiburg")
|
||||
page.get_by_role("textbox", name="Kennwort").press("Enter")
|
||||
page.get_by_role("button", name="Katalog").click()
|
||||
page.get_by_role("textbox", name="Mediennummer").click()
|
||||
return page
|
||||
|
||||
def work_on_page(page, mednr: str):
|
||||
db = Database()
|
||||
page.get_by_role("textbox", name="Mediennummer").fill(mednr)
|
||||
page.get_by_text("Suche starten").nth(1).click()
|
||||
page.get_by_text("Ändern").nth(1).click()
|
||||
page.get_by_role("link", name="Sacherschließung").click()
|
||||
page.get_by_role("link", name="Notation, Genre, Signatur").click()
|
||||
page.locator("input[name=\"cellEditValue\\$7\"]").click()
|
||||
page.locator("input[name=\"cellEditValue\\$7\"]").press("ControlOrMeta+a")
|
||||
page.locator("input[name=\"cellEditValue\\$7\"]").press("ControlOrMeta+c")
|
||||
signature = clipboard.paste()
|
||||
print(signature)
|
||||
|
||||
new_signature = db.insert(signature)
|
||||
clipboard.copy(new_signature)
|
||||
|
||||
page.locator("input[name=\"cellEditValue\\$7\"]").fill(new_signature)
|
||||
page.locator("span").filter(has_text="Speichern").click()
|
||||
page.locator("iframe").content_frame.get_by_role("cell", name="Bibliothek der Pädagogischen").get_by_role("checkbox").check()
|
||||
page.get_by_role("list").get_by_text("Gesamtinfo").click()
|
||||
page.get_by_role("button", name="Ändern").click()
|
||||
page.get_by_role("textbox", name="Signatur", exact=True).click()
|
||||
page.get_by_role("textbox", name="Signatur", exact=True).press("ControlOrMeta+a")
|
||||
page.get_by_role("textbox", name="Signatur", exact=True).fill(new_signature)
|
||||
page.locator("span").filter(has_text="Speichern").click()
|
||||
page.get_by_role("button", name="Zurück").click()
|
||||
page.get_by_role("link", name="Bearbeiten").click()
|
||||
page.get_by_role("link", name="Ansigeln/Absigeln").click()
|
||||
page.get_by_role("button", name="Ok").click()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -51,6 +51,18 @@ class Database:
|
||||
count = cursor.fetchone()[0]
|
||||
return count > 0
|
||||
|
||||
def insert(self, old_signature: str) -> str | None:
|
||||
table = old_signature.split(" ")[0].lower()
|
||||
if table == "ma":
|
||||
return self.insert_ma(old_signature)
|
||||
elif table == "mb":
|
||||
return self.insert_mb(old_signature)
|
||||
elif table == "mc":
|
||||
return self.insert_mc(old_signature)
|
||||
else:
|
||||
# print(f"Error: Unknown signature type '{table}'. Please use 'ma', 'mb', or 'mc'.")
|
||||
return self.insert_ma(old_signature)
|
||||
|
||||
def insert_ma(self, old_signature: str) -> str|None:
|
||||
"""Insert an old signature into the ma table and return the new signature.
|
||||
New Signatures is generated by using 01 / as prefix, then incrementing the number by 1 for each new entry."""
|
||||
|
||||
115
uv.lock
generated
115
uv.lock
generated
@@ -37,6 +37,68 @@ dependencies = [
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8a/38/17f3885713d0f39994563029942b1d31c93d4e56d80da505abfbfb3a3bc4/clipboard-0.0.4.tar.gz", hash = "sha256:a72a78e9c9bf68da1c3f29ee022417d13ec9e3824b511559fd2b702b1dd5b817", size = 1713 }
|
||||
|
||||
[[package]]
|
||||
name = "getpixelcolor"
|
||||
version = "0.2.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
resolution-markers = [
|
||||
"(platform_machine != 'aarch64' and platform_system != 'Darwin') or (platform_system != 'Darwin' and platform_system != 'Linux')",
|
||||
]
|
||||
dependencies = [
|
||||
{ name = "numpy", marker = "(platform_machine != 'aarch64' and platform_system != 'Darwin') or (platform_system != 'Darwin' and platform_system != 'Linux')" },
|
||||
{ name = "pasteboard", marker = "platform_system == 'darwin'" },
|
||||
{ name = "pillow", marker = "(platform_machine != 'aarch64' and platform_system != 'Darwin') or (platform_system != 'Darwin' and platform_system != 'Linux')" },
|
||||
{ name = "pyautogui", marker = "(platform_machine != 'aarch64' and platform_system != 'Darwin') or (platform_system != 'Darwin' and platform_system != 'Linux')" },
|
||||
{ name = "pyobjc", marker = "platform_system == 'darwin'" },
|
||||
{ name = "pyobjc-core", marker = "platform_system == 'darwin'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/fb/50582419aca3d3258e4053834520a0ee64fef14da2cd94684c1d0c77163e/GetPixelColor-0.2.3.tar.gz", hash = "sha256:bacbd0da7f4227ccb8807ff00cf113c10caa6ec1b3803465694791ee08dc623b", size = 3461 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/8b/5f8fc9f748eb3f3c301d5c0b2bf95e4fb5e4d06798068ccfd9a52405bcfc/GetPixelColor-0.2.3-py3-none-any.whl", hash = "sha256:9233cf7bcbf1927a41d07413e4d31d173f4e612bd8ac199ea308b697f2d685ed", size = 3441 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getpixelcolor"
|
||||
version = "0.2.19"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
resolution-markers = [
|
||||
"platform_system == 'Darwin'",
|
||||
"platform_machine == 'aarch64' and platform_system == 'Linux'",
|
||||
]
|
||||
dependencies = [
|
||||
{ name = "numpy", marker = "platform_system == 'Darwin' or (platform_machine == 'aarch64' and platform_system == 'Linux')" },
|
||||
{ name = "pillow", marker = "platform_system == 'Darwin' or (platform_machine == 'aarch64' and platform_system == 'Linux')" },
|
||||
{ name = "pyautogui", marker = "platform_system == 'Darwin' or (platform_machine == 'aarch64' and platform_system == 'Linux')" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/88/14/751ad96804e3ab8ab332f82df8510ac080d38b900ba6c08b9712964d7fc0/GetPixelColor-0.2.19.tar.gz", hash = "sha256:a8953d09e711216f366c019b44ad08cb3cf1fc57b948a01ac35f92f309bf538c", size = 8745 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/31/fe/2519b3a8affb383f40ffa9c771fe2f09f0d08249b125be7c81c3898cfccd/GetPixelColor-0.2.19-py3-none-any.whl", hash = "sha256:9628b6fd3ac2d3c0b152a8237cd609a5e6b481ce74ffdbf6f902dcaff28df2d6", size = 8288 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "greenlet"
|
||||
version = "3.2.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c9/92/bb85bd6e80148a4d2e0c59f7c0c2891029f8fd510183afc7d8d2feeed9b6/greenlet-3.2.3.tar.gz", hash = "sha256:8b0dd8ae4c0d6f5e54ee55ba935eeb3d735a9b58a8a1e5b5cbab64e01a39f365", size = 185752 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/cf/f5c0b23309070ae93de75c90d29300751a5aacefc0a3ed1b1d8edb28f08b/greenlet-3.2.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:500b8689aa9dd1ab26872a34084503aeddefcb438e2e7317b89b11eaea1901ad", size = 270732 },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/ae/91a957ba60482d3fecf9be49bc3948f341d706b52ddb9d83a70d42abd498/greenlet-3.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a07d3472c2a93117af3b0136f246b2833fdc0b542d4a9799ae5f41c28323faef", size = 639033 },
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/df/20ffa66dd5a7a7beffa6451bdb7400d66251374ab40b99981478c69a67a8/greenlet-3.2.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:8704b3768d2f51150626962f4b9a9e4a17d2e37c8a8d9867bbd9fa4eb938d3b3", size = 652999 },
|
||||
{ url = "https://files.pythonhosted.org/packages/51/b4/ebb2c8cb41e521f1d72bf0465f2f9a2fd803f674a88db228887e6847077e/greenlet-3.2.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5035d77a27b7c62db6cf41cf786cfe2242644a7a337a0e155c80960598baab95", size = 647368 },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/6a/1e1b5aa10dced4ae876a322155705257748108b7fd2e4fae3f2a091fe81a/greenlet-3.2.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2d8aa5423cd4a396792f6d4580f88bdc6efcb9205891c9d40d20f6e670992efb", size = 650037 },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/f2/ad51331a157c7015c675702e2d5230c243695c788f8f75feba1af32b3617/greenlet-3.2.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c724620a101f8170065d7dded3f962a2aea7a7dae133a009cada42847e04a7b", size = 608402 },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/bc/862bd2083e6b3aff23300900a956f4ea9a4059de337f5c8734346b9b34fc/greenlet-3.2.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:873abe55f134c48e1f2a6f53f7d1419192a3d1a4e873bace00499a4e45ea6af0", size = 1119577 },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/94/1fc0cc068cfde885170e01de40a619b00eaa8f2916bf3541744730ffb4c3/greenlet-3.2.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:024571bbce5f2c1cfff08bf3fbaa43bbc7444f580ae13b0099e95d0e6e67ed36", size = 1147121 },
|
||||
{ url = "https://files.pythonhosted.org/packages/27/1a/199f9587e8cb08a0658f9c30f3799244307614148ffe8b1e3aa22f324dea/greenlet-3.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:5195fb1e75e592dd04ce79881c8a22becdfa3e6f500e7feb059b1e6fdd54d3e3", size = 297603 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/ca/accd7aa5280eb92b70ed9e8f7fd79dc50a2c21d8c73b9a0856f5b564e222/greenlet-3.2.3-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:3d04332dddb10b4a211b68111dabaee2e1a073663d117dc10247b5b1642bac86", size = 271479 },
|
||||
{ url = "https://files.pythonhosted.org/packages/55/71/01ed9895d9eb49223280ecc98a557585edfa56b3d0e965b9fa9f7f06b6d9/greenlet-3.2.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8186162dffde068a465deab08fc72c767196895c39db26ab1c17c0b77a6d8b97", size = 683952 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/61/638c4bdf460c3c678a0a1ef4c200f347dff80719597e53b5edb2fb27ab54/greenlet-3.2.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f4bfbaa6096b1b7a200024784217defedf46a07c2eee1a498e94a1b5f8ec5728", size = 696917 },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/cc/0bd1a7eb759d1f3e3cc2d1bc0f0b487ad3cc9f34d74da4b80f226fde4ec3/greenlet-3.2.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:ed6cfa9200484d234d8394c70f5492f144b20d4533f69262d530a1a082f6ee9a", size = 692443 },
|
||||
{ url = "https://files.pythonhosted.org/packages/67/10/b2a4b63d3f08362662e89c103f7fe28894a51ae0bc890fabf37d1d780e52/greenlet-3.2.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:02b0df6f63cd15012bed5401b47829cfd2e97052dc89da3cfaf2c779124eb892", size = 692995 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/c6/ad82f148a4e3ce9564056453a71529732baf5448ad53fc323e37efe34f66/greenlet-3.2.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86c2d68e87107c1792e2e8d5399acec2487a4e993ab76c792408e59394d52141", size = 655320 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/4f/aab73ecaa6b3086a4c89863d94cf26fa84cbff63f52ce9bc4342b3087a06/greenlet-3.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:8c47aae8fbbfcf82cc13327ae802ba13c9c36753b67e760023fd116bc124a62a", size = 301236 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keyboard"
|
||||
version = "0.13.5"
|
||||
@@ -55,10 +117,14 @@ version = "0.1.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "clipboard" },
|
||||
{ name = "getpixelcolor", version = "0.2.3", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_system != 'Darwin') or (platform_system != 'Darwin' and platform_system != 'Linux')" },
|
||||
{ name = "getpixelcolor", version = "0.2.19", source = { registry = "https://pypi.org/simple" }, marker = "platform_system == 'Darwin' or (platform_machine == 'aarch64' and platform_system == 'Linux')" },
|
||||
{ name = "keyboard" },
|
||||
{ name = "opencv-python" },
|
||||
{ name = "playwright" },
|
||||
{ name = "psutil" },
|
||||
{ name = "pyautogui" },
|
||||
{ name = "pyperclip" },
|
||||
{ name = "pytesseract" },
|
||||
{ name = "pywin32" },
|
||||
{ name = "winregistry" },
|
||||
@@ -72,10 +138,13 @@ dev = [
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "clipboard", specifier = ">=0.0.4" },
|
||||
{ name = "getpixelcolor", specifier = ">=0.2.3" },
|
||||
{ name = "keyboard", specifier = ">=0.13.5" },
|
||||
{ name = "opencv-python", specifier = ">=4.11.0.86" },
|
||||
{ name = "playwright", specifier = ">=1.52.0" },
|
||||
{ name = "psutil", specifier = ">=7.0.0" },
|
||||
{ name = "pyautogui", specifier = ">=0.9.54" },
|
||||
{ name = "pyperclip", specifier = ">=1.9.0" },
|
||||
{ name = "pytesseract", specifier = ">=0.3.13" },
|
||||
{ name = "pywin32", specifier = ">=310" },
|
||||
{ name = "winregistry", specifier = ">=2.1.1" },
|
||||
@@ -170,6 +239,12 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pasteboard"
|
||||
version = "0.4.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/be/ed/d21829c72b2d7de85a3ef8214639e60611e92676c5559a4e879c5711b3ac/pasteboard-0.4.0.tar.gz", hash = "sha256:dd332253c431ada32074dd5693a231261f2bbd78465de4da27a3469f30d0f84d", size = 28213 }
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "11.2.1"
|
||||
@@ -200,6 +275,25 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "playwright"
|
||||
version = "1.52.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "greenlet" },
|
||||
{ name = "pyee" },
|
||||
]
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/62/a20240605485ca99365a8b72ed95e0b4c5739a13fb986353f72d8d3f1d27/playwright-1.52.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:19b2cb9d4794062008a635a99bd135b03ebb782d460f96534a91cb583f549512", size = 39611246 },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/23/57ff081663b3061a2a3f0e111713046f705da2595f2f384488a76e4db732/playwright-1.52.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0797c0479cbdc99607412a3c486a3a2ec9ddc77ac461259fd2878c975bcbb94a", size = 37962977 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/ff/eee8532cff4b3d768768152e8c4f30d3caa80f2969bf3143f4371d377b74/playwright-1.52.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:7223960b7dd7ddeec1ba378c302d1d09733b8dac438f492e9854c85d3ca7144f", size = 39611247 },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/c6/8e27af9798f81465b299741ef57064c6ec1a31128ed297406469907dc5a4/playwright-1.52.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:d010124d24a321e0489a8c0d38a3971a7ca7656becea7656c9376bfea7f916d4", size = 45141333 },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/e9/0661d343ed55860bcfb8934ce10e9597fc953358773ece507b22b0f35c57/playwright-1.52.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4173e453c43180acc60fd77ffe1ebee8d0efbfd9986c03267007b9c3845415af", size = 44540623 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/81/a850dbc6bc2e1bd6cc87341e59c253269602352de83d34b00ea38cf410ee/playwright-1.52.0-py3-none-win32.whl", hash = "sha256:cd0bdf92df99db6237a99f828e80a6a50db6180ef8d5352fc9495df2c92f9971", size = 34839156 },
|
||||
{ url = "https://files.pythonhosted.org/packages/51/f3/cca2aa84eb28ea7d5b85d16caa92d62d18b6e83636e3d67957daca1ee4c7/playwright-1.52.0-py3-none-win_amd64.whl", hash = "sha256:dcbf75101eba3066b7521c6519de58721ea44379eb17a0dafa94f9f1b17f59e4", size = 34839164 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/4f/71a8a873e8c3c3e2d3ec03a578e546f6875be8a76214d90219f752f827cd/playwright-1.52.0-py3-none-win_arm64.whl", hash = "sha256:9d0085b8de513de5fb50669f8e6677f0252ef95a9a1d2d23ccee9638e71e65cb", size = 30688972 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "psutil"
|
||||
version = "7.0.0"
|
||||
@@ -240,6 +334,18 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyee"
|
||||
version = "13.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/95/03/1fd98d5841cd7964a27d729ccf2199602fe05eb7a405c1462eb7277945ed/pyee-13.0.0.tar.gz", hash = "sha256:b391e3c5a434d1f5118a25615001dbc8f669cf410ab67d04c4d4e07c55481c37", size = 31250 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl", hash = "sha256:48195a3cddb3b1515ce0695ed76036b5ccc2ef3a9f963ff9f77aec0139845498", size = 15730 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygetwindow"
|
||||
version = "0.0.9"
|
||||
@@ -2871,6 +2977,15 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/58/0a/e451c3dbda38dd6abab1fd16c3b35623fc0635dffcbbf97f1acc55a58508/rubicon_objc-0.5.1-py3-none-any.whl", hash = "sha256:17092756241b8370231cfaad45ad6e8ce99534987f2acbc944d65df5bdf8f6cd", size = 63323 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.14.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winregistry"
|
||||
version = "2.1.1"
|
||||
|
||||
Reference in New Issue
Block a user