add tesseract, db to gitignore, update lockfile, change code, add web component

This commit is contained in:
2025-07-03 14:50:25 +02:00
parent 6d2cbe9e36
commit 1c13ee48cb
7 changed files with 308 additions and 47 deletions

2
.gitignore vendored
View File

@@ -8,3 +8,5 @@ wheels/
# Virtual environments
.venv
tesseract
adis.db

115
main.py
View File

@@ -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")

View File

@@ -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",

View File

@@ -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
View 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()

View File

@@ -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
View File

@@ -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"