Ĉapitro 18 - Kontrolante la Klavaro kaj Muso kun GUI Aŭtomatigo
Subtenu la Aŭtoro: Aĉeti la libron sur Amazono aŭ
la libro / ebook pakaĵo rekte Neniu amelo Gazetaro .
Legi la aŭtora aliaj liberaj Python libroj:
Kontrolante la Klavaro kaj Muso kun GUI Aŭtomatigo
Sciante diversaj Python moduloj por redaktado kalkultabelojn, elŝutanta
dosierojn kaj ĵeti programojn estas utilaj, sed kelkfoje simple ne ajna
moduloj por la aplikoj vi devas labori kun. La finfina ilojn por aŭtomatigi taskojn sur via komputilo estas programoj skribas ke rekte kontroli la klavaro kaj muso.
Tiuj programoj povas kontroli aliajn aplikojn sendante ilin virtuala
keystrokes kaj musklakoj, justpython3- kvazaŭ vi sidas ĉe via komputilo
kaj interagante kun la aplikoj mem. Tiu tekniko estas konata kiel grafika uzantinterfaco aŭtomatigo, aŭ GUI aŭtomatigo por mallonga.
Kun GUI aŭtomatigo, viaj programoj povas fari ion ke homa uzanto
sidanta ĉe la komputilo povas fari, krom verŝas kafon sur la klavaro.
Pensu GUI aŭtomatigo kiel programado robótica brako. Vi povas plani la robota brako tajpi en via klavaro kaj movi vian muson por vi. Tiu tekniko estas aparte utila por taskoj kiuj implikas multajn senhonta musklako aŭ plenigado de formularoj.
La
pyautogui
modulo havas funkciojn por simuli muso movadoj, butono klakoj kaj scrolling la muso rado. Ĉi tiu ĉapitro kovras nur subaro de PyAutoGUI trajtoj; Vi povas trovi la plenan dokumentaron ĉe http://pyautogui.readthedocs.org/ . Instalante la pyautogui Modulo
La
pyautogui
modulo povas sendi virtualan klavpremojName kaj musklakoj al Vindozo, OS X, kaj Linukso. Dependanta sur kiu mastruma sistemo vi uzas, eble vi devas instali iuj aliaj moduloj (nomitaj dependencajoj) antaŭ ol vi povas instali PyAutoGUI. - En Vindozo, ekzistas neniuj aliaj moduloj por instali.
- Sur OS X, kuri
sudo pip3 install pyobjc-framework-Quartz
,sudo pip3 install pyobjc-core
, kaj tiamsudo pip3 install pyobjc
. - Sur Linukso, kuri
sudo pip3 install python3-xlib
,sudo apt-get install scrot
,sudo apt-get install python3-tk
kajsudo apt-get install python3-dev
. (Scrot estas ekrankopio programo kiu PyAutoGUI uzas.)
Post tiuj dependencajoj estas instalitaj, kuri
pip install pyautogui
(aŭ pip3
sur OS X kaj Linukso) instali PyAutoGUI.
Apendico A havas kompletan informon sur instali triaj moduloj. Testi ĉu PyAutoGUI estis instalita korekte, kuri
import pyautogui
de la interaga ŝelo kaj kontroli por ajna erarmesaĝojn. Restanta sur Track
Antaŭ vi saltas en por GUI aŭtomatigo, vi devus scii kiel eskapi problemojn kiuj povas ekesti. Python povas movi vian muson kaj tipon pulsbatoj al nekredebla rapido. Fakte, ĝi povus esti tro rapida por aliaj programoj por akompani.
Ankaŭ, se iu iras malbone sed via programo tenas movanta la muson
ĉirkaŭe, ĝi estos malfacile scii kion ekzakte la programo faras aŭ kiel
rekuperi de la problemo. Kiel la sorĉitaj balailojn el Disney La Saĝuloj Metilernanto,
kiuj plenumadis plenigante-kaj tiam overfilling-Mickey kuvon kun akvo,
via programo povis eliri de kontrolo kvankam ĝi estas sekvanta vian
instrukcioj perfekte.
Haltante la programo povas esti malfacila se la muso moviĝas ĉirkaŭe
sur ĝia propra, evitante vin de klakanta la sencela fenestro por fermi
ĝin. Feliĉe, estas kelkaj manieroj por eviti aŭ rekuperi de GUI aŭtomatigo problemojn.
Fermadon Ĉiu por elsaluti
Eble la plej simpla maniero por halti malnovan-kontrolo GUI aŭtomatigo
programo por elsaluti, kiu fermos ĉiuj kurante programoj. En Windows kaj Linukso, la elsaluton klavkomando estas CTRL - ALT - DEL. Sur OS X, tio estas - Klavoj MAJUSKLIGA - EBLO -q. Per elsaluti, vi perdos ajnan nekonservitajn laboro, sed almenaŭ vi ne devas atendi por plena reboot de la komputilo.
Paŭzoj kaj Fail-Safes
Vi povas diri al via skripto atendi post ĉiu funkcio alvoko, donante
vin mallonga fenestro preni kontrolon de la muso kaj klavaro se iu
eliras malbone. Por fari tion, metis la
pyautogui.PAUSE
variablo al la nombro da sekundoj vi volas paŭzi. Ekzemple, post metado pyautogui.PAUSE = 1.5
, ĉiu PyAutoGUI funkcio alvoko atendos unu kaj duono sekundoj post plenumante lia agado. Ne- PyAutoGUI instrukcioj ne havas tiun paŭzo.
PyAutoGUI ankaŭ havas fail-sekura trajto. Movi la muson kursoron al la supra-maldekstra angulo de la ekrano kaŭzos PyAutoGUI levi la
pyautogui.FailSafeException
escepto. Via programo povas aŭ manipuli tiun escepton kun try
kaj except
deklaroj aŭ lasu la escepto frakasi vian programon. De ajna formo, la fail-sekura trajto ĉesos la programon se vi rapide movi la muson ĝis supren kaj maldekstren vi povas. Vi povas malŝalti tiun funkcion per opcio pyautogui.FAILSAFE = False
. Eniri la sekva en la interaga konko: >>> Import pyautogui >>> Pyautogui.PAUSE = 1 >>> Pyautogui.FAILSAFE = Vera
Tie ni importi
pyautogui
kaj starigis pyautogui.PAUSE
al 1
por unu-dua paŭzo post ĉiu funkcio nomita. Ni starigis pyautogui.FAILSAFE
al True
ebligi la fail-sekura trajto. Kontrolante Muso Movado
En tiu sekcio, vi lernos kiel movi la muson kaj spuri lian pozicion sur
la ekrano uzante PyAutoGUI, sed unue vi devas kompreni kiel PyAutoGUI
laboras kun koordinatoj.
La muso funkcioj de PyAutoGUI uzi x- kaj y-koordinatoj. Figuro 18-1 montras la koordinatsistemo por la komputila ekrano; ĝi estas simila al la koordinatsistemo uzata por bildoj, diskutis en Ĉapitro 17 . La origino, kie x kaj y estas ambaŭ nulaj, estas ĉe la supra-maldekstra angulo de la ekrano. La x-koordinatoj pliigi iras dekstren, kaj la y-koordinatoj pliigi subiron. Ĉiuj koordinatoj estas pozitivaj entjeroj; ekzistas neniuj negativaj koordinatoj.
Figuro 18-1. La koordinatoj de komputila ekrano kun 1920 × 1080 rezolucio
Via difino estas kiom rastrumeroj larĝa kaj altkreska via ekrano.
Se via ekrano rezolucio estas agordita al 1920 × 1080, tiam la
koordinato por la supra-maldekstra angulo estos (0, 0), kaj la
koordinato por malsupre-dekstra angulo estos (1919, 1079).
La
pyautogui.size()
redonas du-entjera opo de la ekrano de larĝeco kaj alteco en pikseloj. Eniri la sekva en la interaga konko: >>> Import pyautogui >>> Pyautogui.size () (1920, 1080) >>> Larĝeco, alteco = pyautogui.size ()
pyautogui.size()
redonas (1920, 1080)
en komputilo kun 1920 × 1080 rezolucio; Dependanta sur via ekrano la rezolucio, via reveno valoro povas esti malsama. Vi povas stoki la larĝeco kaj alteco de pyautogui.size()
en variabloj kiel width
kaj height
por bona legado en viaj programoj. Movante la Muso
Nun ke vi komprenas ekrano koordinatoj, ni movas la muson. La
pyautogui.moveTo()
funkcio estos tuj movas la muson kursoron al specifita pozicio sur la ekrano. Entjeraj valoroj por la x- kaj y-koordinatoj konsistigas la funkcia unua kaj dua argumentoj, respektive. Laŭvola duration
entjero aŭ kaleŝego ŝlosilvorto argumento specifas la nombron da sekundoj ĝi devus preni movi la muso al la celloko. Se vi lasas ĝin, la defaŭlto estas 0
por instantáneas movado. (Ĉiuj el la duration
ŝlosilvorto argumentojn PyAutoGUI funkcioj estas laŭvola.) Enmetu la sekva en la interaga konko: >>> Import pyautogui >>> Por i en gamo (10): pyautogui.moveTo (100, 100, daŭro = 0.25) pyautogui.moveTo (200, 100, daŭro = 0.25) pyautogui.moveTo (200, 200, daŭro = 0.25) pyautogui.moveTo (100, 200, daŭro = 0.25)
Tiu ekzemplo movas la muson kursoron dekstrume en kvadrata padrono inter la kvar koordinatoj havigis tuta de dek fojojn. Ĉiu movado prenas kvaronon de sekundo, kiel specifita de la
duration=0.25
ŝlosilvorto argumento. Se vi ne aprobis tria argumento al iu el la pyautogui.moveTo()
alvokoj, la muskursoro estus senprokraste teletransportado de punkto al punkto.
La
pyautogui.moveRel()
funkcio movas la muson kursoron relativa al ĝia nuna pozicio.
La sekvanta ekzemplo movas la muson en la sama placo mastro, krom ĝi
komencas la placo de kie la muso hazarde estas sur la ekrano kiam la
kodo komenciĝas kurante: >>> Import pyautogui >>> Por i en gamo (10): pyautogui.moveRel (100, 0, daŭro = 0.25) pyautogui.moveRel (0, 100, daŭro = 0.25) pyautogui.moveRel (-100, 0, daŭro = 0.25) pyautogui.moveRel (0, -100, daŭro = 0.25)
pyautogui.moveRel()
ankaŭ prenas tri argumentojn: kiom rastrumeroj movi horizontale
dekstren, kiom rastrumeroj moviĝi vertikale malsupren kaj (laŭvole),
kiom longe ĝi devus preni por kompletigi la movadon. Negativa entjero por la unua aŭ dua argumento kaŭzos la muson movi maldekstren aŭ supren, respektive. Ricevi la Muso Pozicio
Vi povas determini la musa nuna pozicio nomante la
pyautogui.position()
funkcio, kiu revenos opo de la muskursoro la x kaj y pozicioj en la momento de la funkcio nomita. Eniri la sekva en la interaga ŝelo, movante la muso ĉirkaŭ post ĉiu alvoko: >>> Pyautogui.position () (311, 622) >>> Pyautogui.position () (377, 481) >>> Pyautogui.position () (1536, 637)
Kompreneble, via reveno valoroj varias dependanta sur kie via muskursoron.
Projekto: "Kie Estas la Muso Dekstra Now?"
Povi determini la muso pozicio estas grava parto de la agordo de via GUI aŭtomatigo skriptoj. Sed estas preskaŭ neeble diveni la ĝustajn koordinatojn de pixel nur rigardante la ekrano. Estus oportuna havi programon kiu senĉese montras la x- kaj y-koordinatoj de la muskursoro kiam vi movas ĝin ĉirkaŭe.
Je alta nivelo, jen kion via programo faru,
- Montri la nunan x- kaj y-koordinatoj de la muso kursoro.
- Ĝisdatigi tiuj koordinatoj kiel la muso moviĝas ĉirkaŭ la ekrano.
Tio signifas via kodo devos fari la sekvan:
- Voku la
position()
funkcion por preni la nuna koordinatoj. - Viŝi la antaŭe presitaj koordinatoj de printado
\b
retropaŝo karakteroj por la ekrano. - Manipuli la
KeyboardInterrupt
escepto tiel la uzanto povas premi CTRL -C esi.
Malfermi novan dosieron redaktanto fenestro kaj savi ĝin kiel mouseNow.py.
Paŝo 1: Importi la modulo
Komenci vian programon kun la sekvaj:
#! python3 # MouseNow.py - Montras la muskursoro nuna pozicio. importado pyautogui print ( 'Premu Stir-C esi.') #TODO: Akiri kaj presi la muso koordinatoj.
La komenco de la programo importas la
pyautogui
modulo kaj presas recordatorio al la uzanto kiun ili devas premi CTRL -C esi. Paŝo 2: Aro Supren la Quit Kodo kaj Infinite Loop
Vi povas uzi malfinia
while
buklo konstante presi la nunan muso koordinatoj de mouse.position()
. Koncerne la kodo kiu forlasas la programon, vi devas kapti la KeyboardInterrupt
escepto, kiu levas kiam la uzanto premas CTRL -C. Se vi ne manipuli ĉi escepto, ĝi montros malbelan traceback kaj erarmesaĝon al la uzanto. Aldonu la jenan al via programo: #! python3 # MouseNow.py - Montras la muskursoro nuna pozicio. importado pyautogui print ( 'Premu Stir-C esi.') provu: dum Vera: # TODO: Akiri kaj presi la muso koordinatoj. ❶ krom KeyboardInterrupt: ❷ print ( '\ nDone.')
Manipuli la escepto, oni cxirkauxu senfina
while
buklo en try
komunikaĵo. Kiam la uzanto premas CTRL -C, la programo ekzekuto movos al la except
klaŭzo ❶ kaj Done.
Estos presita en nova linio ❷. Paŝo 3: Iru kaj Print la Muso Koordinatoj
La kodo ene la
while
buklo ne devus akiri la aktualan muso koordinatoj, formati ilin rigardi belan, kaj presi ilin. Aldoni la sekvan kodon en la internon de la while
buklo: #! python3 # MouseNow.py - Montras la muskursoro nuna pozicio. importado pyautogui print ( 'Premu Stir-C esi.') - Snip - # Akiri kaj presi la muso koordinatoj. x, y = pyautogui.position () positionStr = 'X:' + str (x) .rjust (4) + 'Y:' + str (y) .rjust (4) - Snip -
Uzante la multnombraj asigno lertaĵo, la
x
kaj y
variabloj estas donitaj valoroj de la du entjeroj revenis en la opo de pyautogui.position()
. Pasante x
kaj y
al la str()
funkcio, Vi povas akiri string formoj de la entjeraj koordinatoj. La rjust()
kordoj metodo dekstra pravigi ilin, por ke ili prenu la saman kvanton
de spaco, ĉu la koordinato havas unu, du, tri, aŭ kvar ciferoj. Concatenando la dekstra pravigita ŝnuro koordinatoj kun 'X: '
kaj ' Y: '
etiketoj donas ni nete formatita cxeno, kiu estos stokitaj en positionStr
.
Fine de via programo, aldoni la sekvan kodon:
#! python3 # MouseNow.py - Montras la muskursoro nuna pozicio. - Snip - print (positionStr, fino = '') ❶ print ( '\ b' * len (positionStr), fino = '', flush = Vera)
Tiu vere presas
positionStr
al la ekrano. La end=''
ŝlosilvorto argumento por print()
malhelpas la defaŭlta linion karaktero de esti aldonita al la fino de la presita linio. Ĝi estas ebla forigi tekston vi jam presita por la ekrano-sed nur por la plej lastatempa linio de teksto. Unufoje vi presi novan linion karaktero, vi ne povas viŝi ion presita antaŭ ĝi.
Viŝi teksto, montri la
\b
retropaŝo eskapo karaktero. Tiu speciala karaktero viŝas gravulo fine de la aktuala linio de la ekrano. La linio je ❶ uzas ĉenon replicación produkti ŝnuron kun tiom da \b
karakteroj kiel la longo de la kordo stokitaj en positionStr
, kiu havas la efikon de viŝante la positionStr
ĉeno kiu laste estis presita.
Por teknika kialo preter la kadro de tiu ĉi libro, ĉiam pasas
flush=True
al print()
vokas ke presaĵo \b
retropaŝo karakteroj. Alie, la ekrano ne povus ĝisdatigi la tekston kiel dezirata.
Ekde la
while
buklo ripetas tiel rapide, ke la uzanto ne vere rimarkas ke vi forigi kaj reimprimiendo la tuta sur la ekrano.
Ekzemple, se la x-koordinato estas 563 kaj la muso movas unu rastrumero
dekstren, ĝi similos nur la 3 en 563 estas ŝanĝita al 4.
Kiam vi kuros la programo, estos nur du linioj presita. Ili devus aspekti tiel:
Premu Stir-C esi. X: 290 Y: 424
La unua linio montras la instrukcion premi CTRL -C esi. La dua linio kun la muso koordinatoj ŝanĝos kiel vi movas la muson ĉirkaŭ la ekrano. Uzante ĉi programo, vi povos malkovri la muso koordinatoj por via grafika interfaco aŭtomatigo skriptoj.
Kontrolante Muso Interago
Nun ke vi scias kiel movi la muson kaj eltrovi kie estas sur la ekrano, vi pretas komenci klakanta, trenante kaj movo.
Klakante la Muso
Sendi virtualan musklako al via komputilo, invitu
pyautogui.click()
metodo. Defaŭlte, klaku uzas la maldekstran musbutonon kaj okazas kie la musmontrilo estas nuntempe lokita.
Vi povas pasi x- kaj y-koordinatoj de la klako kiel laŭvola unua kaj
dua argumentoj se vi volas ĝin okazi ie alia ol la musa nuna pozicio.
Se vi volas specifi kion musbutonon por uzi, inkluzivi la
button
ŝlosilvorto argumento, kun valoro de 'left'
, 'middle'
, aux 'right'
. Ekzemple, pyautogui.click(100, 150, button='left')
klaku la maldekstran musbutonon ĉe la koordinatoj (100, 150), dum pyautogui.click(200, 250, button='right')
plenumos dekstra-klaki ĉe (200, 250).
Eniri la sekva en la interaga konko:
>>> Import pyautogui >>> Pyautogui.click (10, 5)
Vi devus vidi la musmontrilo movo al proksime de la supro-maldekstra angulo de via ekrano kaj alklaku denove. Plena "klaki" estas difinita kiel pelante musbutonon malsupren kaj tiam liberigi ĝin reen supren sen movi la kursoron. Vi povas ankaŭ fari clic nomante
pyautogui.mouseDown()
, kiu nur puŝas la musbutonon malsupren kaj pyautogui.mouseUp()
, kiu nur liberigas la butonon. Tiuj funkcioj havas la samajn argumentojn kiel click()
, kaj fakte, la click()
funkcio estas nur oportuna wrapper ĉirkaŭ tiuj du funkcio alvokoj.
Kiel plian oportuneco, la
pyautogui.doubleClick()
funkcion plenumos du klakoj per la maldekstra musbutono, dum la pyautogui.rightClick()
kaj pyautogui.middleClick()
funkcioj plenumos clic kun la dekstra kaj meza musbutonoj, respektive. Trenante la Muso
Trenante per movanta la muson dum tenanta malsupren unu el la musbutonoj.
Ekzemple, vi povas movi dosierojn inter dosierujoj trenante la
dosierujo ikonojn, aŭ vi povas kopii nomumoj ĉirkaŭdancis kalendaro app.
PyAutoGUI provizas la
pyautogui.dragTo()
kaj pyautogui.dragRel()
funkcioj treni la muson kursoron al nova loko aŭ situo relativa al ĝia nuna. La argumentoj por dragTo()
kaj dragRel()
estas la sama kiel moveTo()
kaj moveRel()
: la X-koordinato / horizontala movado, la y-koordinato / vertikala movado, kaj laŭvola daŭro de tempo. (OS X ne treni ĝuste kiam la muso moviĝas tro rapide, do transirinte duration
ŝlosilvorto argumento estas rekomendinda.)
Provi tiujn funkciojn, malfermi grafikan-desegno apliko kiel Paint en Windows, Peniko sur OS X, aŭ GNU Farbo sur Linukso. (Se vi ne havas desegno apliko, vi povas uzi la enretan unu ĉe http://sumopaint.com/ .) Mi uzas PyAutoGUI desegni en tiuj aplikoj.
Kun la muso kursoron super la desegno apliko la tolo kaj la Krajono aŭ
Brush ilo elektita, enigu la jenajn en novan dosieron redaktanto
fenestro kaj savi ĝin kiel spiralDraw.py:
importado pyautogui, tempo ❶ time.sleep (5) ❷ pyautogui.click () # klako meti desegnante programon en fokuso distanco = 200 dum distanco> 0: ❸ pyautogui.dragRel (distanco, 0, daŭro = 0,2) # movon dekstren ❹ distanco = distanco - 5 ❺ pyautogui.dragRel (0, distanco, daŭro = 0,2) # movi malsupren ❻ pyautogui.dragRel (-distance, 0, daŭro = 0,2) # movo maldekstra distanco = distanco - 5 pyautogui.dragRel (0, -distance, daŭro = 0,2) # supreniĝi
Kiam vi kuros ĉi programo, estos kvin-dua prokrasto ❶ por vi movi la
muson kursoron super la desegno programo fenestro kun la krajono aŭ
Brush ilo selektitaj. Tiam spiralDraw.py prenos kontrolon de la muso kaj alklaku meti la desegno programo en fokuso ❷. Fenestron estas en fokuso
kiam havas aktivan palpebrumante kursoro, kaj la agoj vi prenis
similajn tajpanta aŭ, en tiu kazo, trenante la muson-influos tiu
fenestro. Iam la desegno programo estas en fokuso, spiralDraw.py tiras kvadraton spiralo padrono kiel la unu en Figuro 18-2 .
Figuro 18-2. La rezultoj de la
pyautogui.dragRel()
ekzemplo
La
distance
variablo komenciĝas ĉe 200
, do sur la unua ripeto de la while
buklo, la unua dragRel()
alvoko trenas la kursoron 200 rastrumeroj dekstren, prenante 0.2 sekundoj ❸. distance
estas poste malpliigita al 195 ❹ kaj la dua dragRel()
alvoko trenas la kursoron 195 rastrumeroj malsupren ❺. La tria dragRel()
alvoko trenas la kursoron -195 horizontale (195 al la maldekstra) ❻, distance
malpliigas al 190, kaj la lasta dragRel()
alvoko trenas la kursoron 190 rastrumeroj supren. Sur ĉiu ripeto, la muso estas trenita dekstra, sube, maldekstra kaj supren, kaj distance
estas iomete pli malgranda ol ĝi estis en la antaŭa ripeto. Per looping super ĉi kodon, vi povas movi la muso kursoron desegni kvadrata spiralo.
Vi povus desegni ĉi spiralo mane (aŭ pli ĝuste, de muso), sed vi devus labori malrapide esti tiel preciza. PyAutoGUI povas fari ĝin en kelkaj sekundoj!
noto
Vi povus havi vian kodo desegni la bildo uzanta la
pillow
modulo desegno funkcioj-vidu Ĉapitro 17 por pli informo. Sed
uzante GUI aŭtomatigo permesas uzi la progresinta desegno iloj kiuj
grafiko programoj povas havigi, kiel ekzemple gradientoj, malsamaj
brosoj, aŭ la ĝissate sitelo. Scrolling la Muso
La fina PyAutoGUI muso funkcio estas
scroll()
, kiu pasas entjera argumento por kiom multaj unuoj volas rulumi la muson supren aŭ malsupren.
La grandeco de ekzemplero varias por ĉiu mastruma sistemo kaj aplikoj,
tial vi devos eksperimenti vidi ĝuste kiom multe ĝi rulumas en via
aparta situacio. La movo okazas en la muskursoro nuna pozicio. Pasante pozitiva entjero rulumas supren kaj pasi negativa entjero rulumas malsupren. Kuri la jena en sencela la interaga ŝelo dum la muskursoron sur la sencela fenestro: >>> Pyautogui.scroll (200)
Vi vidos sencela mallonge movo supren-kaj tiam iri reen malsupren. Falantaj movo okazas pro sencela aŭtomate rulumas malsupren al la fundo post ekzekuti instrukcion. Entajpu tiun kodon anstataŭe:
>>> Import pyperclip >>> Nombroj = '' >>> Por i en gamo (200): nombroj = nombroj + str (i) + '\ n' >>> Pyperclip.copy (nombroj)
Ĉi importaĵoj
pyperclip
kaj starigas malplenan ĉenon, numbers
. La kodo tiam cikloj tra 200 nombroj kaj aldonas ĉiu numero al numbers
, kune kun lino. Post pyperclip.copy(numbers)
, la tondujo estos ŝarĝita kun 200 linioj de nombroj. Malfermi novan dosieron redaktanto fenestro kaj algluu la tekston en ĝin. Tiu donos al vi grandan tekston fenestro provi rulado en. Enigu la sekvan kodon en la interaga konko: >>> Import tempo, pyautogui >>> Time.sleep (5); pyautogui.scroll (100)
Sur la dua linio, vi eniras du komandojn apartigitaj per punktokomo,
kiu diras Python kuri la komandojn kvazaŭ sur apartaj linioj. La sola diferenco estas ke la interaga ŝelo ne invitos vin enigo inter la du instrukciojn. Tiu estas grava por tiu ekzemplo ĉar ni volas la alvoko al
pyautogui.scroll()
okazi aŭtomate post la embuskon.
(Notu ke dum metante du komandojn sur unu linio povas esti utila en la
interaga ŝelo, vi devus ankoraŭ havi ĉiu instrukcio sur aparta linio en
viaj programoj.)
Post premanta ENTER kuri la kodon, vi havos kvin sekundoj alklaki la dosieron redaktanto fenestro meti ĝin en fokuso. Iam la paŭzo estas finita, la
pyautogui.scroll()
alvoko kaŭzos la dosiero redaktanto fenestro por rulumi supren post la kvin-dua prokrasto. Laborante kun la Ekrano
Via GUI aŭtomatigo programoj ne devas klaki kaj tajpi blinde. PyAutoGUI havas ekrankopio trajtoj kiuj povas krei bildon dosiero bazita sur la nuna enhavo de la ekrano. Tiuj funkcioj povas ankaŭ resendas Pillow
Image
celo de la nuna ekrano aspekto. Se vi estis saltante ĉirkaŭ en tiu libro, vi volas legi Ĉapitro 17 kaj instali la pillow
modulo antaŭ daŭrigi kun ĉi tiu sekcio.
Sur Linukso komputiloj, la
scrot
programo devas esti instalita por uzi la ekranfoto funkcioj en PyAutoGUI. En Terminal fenestro, kuri sudo apt-get install scrot
instali tiun programon. Se estas en Windows aŭ OS X, salti ĉi tiun paŝon kaj daŭrigos kun la sekcio. Prenanta Ekrankopio
Preni ekrankopioj en Python, invitu
pyautogui.screenshot()
funkcio. Eniri la sekva en la interaga konko: >>> Import pyautogui >>> Im = pyautogui.screenshot ()
La
im
variablo enhavos la Image
objekto de la ekranbildo. Vi nun povas alvoki metodojn sur la Image
objekto en la im
variablo, ĝuste kiel ajna alia Image
objekto. Eniri la sekva en la interaga konko: >>> Im.getpixel ((0, 0)) (176, 176, 175) >>> Im.getpixel ((50, 200)) (130, 135, 144)
Pasi
getpixel()
opo de koordinatoj, kiel (0, 0) aŭ (50, 200), kaj ĝi rakontos al vi la
koloron de la rastrumero ĉe tiuj koordinatoj en via bildo. La reveno valoro de getpixel()
estas RGB opo de tri entjeroj por la kvanto de ruĝa, verda, kaj blua en la rastrumero.
(Ne estas kvara valoro por alfa, ĉar ekrankopio bildoj estas plene
opaka.) Jen kiel viaj programoj povas "vidi" kio estas aktuale sur la
ekrano. Analizante la Screenshot
Diri ke unu el la ŝtupoj en via GUI aŭtomatigo programo estas alklaki grizan butonon. Antaux nomante la
click()
metodon, vi povus preni ekrankopio kaj rigardi la rastrumero kie la skripto estas proksimume klaki. Se ĝi estas ne la sama griza kiel la griza butono, do via programo scias io estas malĝusta. Eble la fenestro kopiis neatendite, aŭ eble pop-up dialogo blokis la butono.
Ĉe tiu punkto, anstataŭ daŭrigi-kaj eble kaŭzante detruoj klakante la
malĝusta afero-via programo povas "vidi" kiuj ne alklakante la ĝustan
aferon kaj halti.
PyAutoGUI la
pixelMatchesColor()
funkcio estos redoni True
se la rastrumero ĉe la donita x- kaj y-koordinatoj sur la ekrano kongruas la donita koloro.
La unua kaj dua argumentoj estas entjeroj por la x- kaj y-koordinatoj,
kaj la tria argumento estas opo de tri entjeroj por la RGB koloro la
ekrano rastrumero devas kongrui. Eniri la sekva en la interaga konko: >>> Import pyautogui >>> Im = pyautogui.screenshot () ❶ >>> im.getpixel ((50, 200)) (130, 135, 144) ❷ >>> pyautogui.pixelMatchesColor (50, 200, (130, 135, 144)) veraj ❸ >>> pyautogui.pixelMatchesColor (50, 200, (255, 135, 144)) falsa
Post preni ekrankopio uzanta
getpixel()
por ricevi RGB opo por la koloro de pixel ĉe specifa koordinatoj ❶, pasigi la sama koordinatoj kaj RGB opo al pixelMatchesColor()
❷, kiu devus reveni True
. Tiam ŝanĝi valoron en la RGB opo kaj nomas pixelMatchesColor()
denove por la sama koordinatoj ❸. Tiu devus reveni false
. Tiu metodo povas esti utila por voki kiam via GUI aŭtomatigo programoj estas proksimume nomi click()
. Notu ke la koloro ĉe la donitaj koordinatoj devas precize kongrui. Se ĝi estas eĉ iomete malsamajn-ekzemple, (255, 255, 254)
anstataŭ (255, 255, 255)
-then pixelMatchesColor()
revenos False
. Projekto: Etendante la mouseNow Programo
Vi povus etendi la mouseNow.py
projekto el pli frue en ĉi tiu ĉapitro por ke ĝi ne nur donas la x- kaj
y-koordinatoj de la muskursoro aktuala pozicio sed ankaŭ donas la RVB
koloro de la rastrumero sub la kursoro. Modifi la kodon ene la
while
buklo de mouseNow.py rigardi tiel: #! python3 # MouseNow.py - Montras la muskursoro nuna pozicio. - Snip - positionStr = 'X:' + str (x) .rjust (4) + 'Y:' + str (y) .rjust (4) pixelColor = pyautogui.screenshot (). getpixel ((x, y)) positionStr + = 'RGB: (' + str (pixelColor [0]). rjust (3) positionStr + = ',' + str (pixelColor [1]). rjust (3) positionStr + = ',' + str (pixelColor [2]). rjust (3) + ')' print (positionStr, fino = '') - Snip -
Nun, kiam vi kuris mouseNow.py, la eligo inkludos la RVB koloro valoro de la rastrumero sub la musmontrilo.
Premu Stir-C esi. X: 406 Y 17 RGB: (161, 50, 50)
Tiuj informoj, kune kun la
pixelMatchesColor()
funkcio, devus faciligi aldoni rastrumero koloro ĉekojn por via grafika interfaco aŭtomatigo skriptoj. bildo Rekono
Sed kion se vi ne scias anticipe kie PyAutoGUI devus klaki? Vi povas uzi bildon rekono anstataŭe. Donu PyAutoGUI statuon, kion vi volas klaki kaj lasu ĝin diveni la koordinatojn.
Ekzemple, se vi antaŭe prenitaj ekrankopio kapti la bildon de Submetu butonon en submit.png, la
locateOnScreen()
funkcio estos redoni la koordinatojn kie tiu bildo troviĝas. Vidi kiel locateOnScreen()
funkcias, provu preni ekrankopio de malgranda areo sur via ekrano; tiam savi la bildon kaj eniri la sekva en la interaga ŝelo, anstataŭante 'submit. png'
'submit. png'
kun la dosiernomo de via ekranbildo: >>> Import pyautogui >>> Pyautogui.locateOnScreen ( 'submit.png') (643, 745, 70, 29)
La kvar-entjera opo ke
locateOnScreen()
redonas havas la x-koordinato de la maldekstra rando, la y-koordinato
de la supro eĝo, la larĝo kaj la alto de la unua loko sur la ekrano la
bildo estis trovita. Se vi provas tion en via komputilo kun via propra ekrankopio, via reveno valoro estos malsama de la montrita ĉi tie.
Se la bildo ne povas esti trovita sur la ekrano,
locateOnScreen()
revenos None
. Notu ke la bildo sur la ekrano devas parigi la provizitaj bildoj perfekte por esti rekonitaj. Se la bildo estas eĉ pixel for, locateOnScreen()
revenos None
.
Se la bildo troviĝas en pluraj lokoj sur la ekrano,
locateAllOnScreen()
revenos Generator
objekto, kiu povas esti pasita al list()
redonas liston de kvar-entjeraj opoj. Estos unu kvar-entjera opo por ĉiu loko kie la bildo estas trovita sur la ekrano. Daŭrigi la interaga ŝelo ekzemplo enmetante la jenan (kaj anstataŭante 'submit.png'
kun via propra bildo dosiernomo): >>> Liston (pyautogui.locateAllOnScreen ( 'submit.png')) [(643, 745, 70, 29), (1007, 801, 70, 29)]
Ĉiu de la kvar-entjeraj opoj reprezentas areon sur la ekrano. Se via bildo estas nur trovita en unu areo, tiam uzanta
list()
kaj locateAllOnScreen()
simple resendas liston enhavantan unu opo.
Unufoje vi havas la kvar-entjera opo por la areo sur la ekrano kie via
bildo estis trovita, vi povas alklaki la centro de tiu areo aprobante la
opo al la
center()
funkcio reveni x- kaj y-koordinatoj de la areo centro . Eniri la sekva en la interaga ŝelo, anstataŭante la argumentoj kun via propra dosiernomo, kvar-entjera opo kaj kunordigi paro: >>> Pyautogui.locateOnScreen ( 'submit.png') (643, 745, 70, 29) >>> Pyautogui.center ((643, 745, 70, 29)) (678, 759) >>> Pyautogui.click ((678, 759))
Unufoje vi havas centron koordinatoj de
center()
, pasante la koordinatojn por click()
devus klaki la centro de la areo sur la ekrano kiu kongruas kun la bildo vi pasis al locateOnScreen()
. Kontrolante la Klavaro
PyAutoGUI ankaŭ havas funkciojn por sendi virtualajn klavpremojName al
via komputilo, kiu ebligas al vi plenigi formoj aŭ tajpu tekston en
aplikoj.
Sendante String de la Klavaro
La
pyautogui.typewrite()
funkcio sendas virtualan klavpremojName al la komputilo. Kio tio klavpremojName fari dependas kion fenestro kaj tekstujon havas fokuson. Vi eble volas unue sendi musklako al la teksto kampo vi volas por certigi ke ĝi koncentras.
Kiel simpla ekzemplo, ni uzas Python aŭtomate tajpas la vortojn Saluton mondo! En dosieron redaktanto fenestro.
Unue malfermi novan dosieron redaktanto fenestro kaj lokigi ĝin en la
supra-maldekstra angulo de via ekrano por ke PyAutoGUI estos alklaku la
dekstran lokon por enporti en fokuso. Sekva, eniri la sekva en la interaga konko:
>>> Pyautogui.click (100, 100); pyautogui.typewrite ( 'Saluton mondo!')
Rimarku kiel metante du komandojn sur la sama linio, apartigitaj per
punktokomo, tenas la interaga ŝelo de instigante vin por enigo inter
kuranta la du instrukciojn. Ĉi malebligas vin hazarde alportante nova fenestro konturiĝas inter la
click()
kaj typewrite()
vokas, kiu farus fuŝas la ekzemplo.
Python unue sendas virtualan musklako al la koordinatoj (100, 100), kiu
devus klaki la dosiero redaktanto fenestro kaj metis gxin en fokuso. La
typewrite()
alvoko sendos la tekston Saluton mondo! Al la fenestro, igante ĝin aspekti Figuro 18-3 . Vi nun havas kodon kiu povas tajpi por vi!
Figuro 18-3. Uzante PyAutogGUI alklaki la dosieron redaktanto fenestro kaj tajpu Saluton mondo! Tien
Defaŭlte, la
typewrite()
funkcio estos tajpi la plenan ŝnuro tuj. Tamen, vi povas pasi laŭvola dua argumento aldoni mallonga paŭzo inter ĉiu karaktero. Tiu dua argumento estas entjero aŭ kaleŝego valoron de la nombro da sekundoj paŭzi. Ekzemple, pyautogui.typewrite('Hello world!', 0.25)
atendos kvarono dua post tajpado H, alia kvarono dua post e, kaj tiel plu.
Tiu laŭgrada tajpilo efiko povas esti utila por malrapida aplikoj kiuj
ne povas procesi pulsbatoj sufiĉe rapida por subteni supren kun
PyAutoGUI.
Por gravuloj kiel A aŭ ! , PyAutoGUI aŭtomate simuli tenas la klavoj MAJUSKLIGA ŝlosilo ankaŭ.
ŝlosilo Nomoj
Ne ĉiuj klavoj estas facile reprezenti kun ununura teksto karakteroj. Ekzemple, kiel vi reprezentas la klavoj MAJUSKLIGA aŭ maldekstre sago ŝlosilo kiel ununura karaktero? En PyAutoGUI, tiuj klavaro klavoj estas reprezentitaj per mallongaj ŝnuro valoroj anstataŭe:
'esc'
por la ESC klavo aŭ 'enter'
la ENENklavon ŝlosilo.
Anstataŭ sola ĉeno argumento, liston de tiuj klavaron klavo kordoj povas esti pasita al
typewrite()
. Ekzemple, jena alvoko premas la klavon, tiam la B klavo, poste la maldekstra sago ŝlosilo dufoje, kaj fine la X kaj Y klavoj:>>> Pyautogui.typewrite ([ 'a', 'b', 'lasita', 'lasita', 'X', 'Y'])
Ĉar premante la maldekstra sago ŝlosilo movas la klavaro kursoron, tiu volo eligo XYab . Tabelo 18-1 listigas la PyAutoGUI klavaron klavo kordojn kiujn vi povas pasi por
typewrite()
simuli premante ajna kombino de klavoj.
Vi povas ankaŭ rigardi la
pyautogui.KEYBOARD_KEYS
liston por vidi ĉiujn eblajn klavaron klavo kordoj kiuj PyAutoGUI akceptos. La 'shift'
ĉeno referencas al la maldekstra klavoj MAJUSKLIGA ŝlosilo kaj estas ekvivalenta al 'shiftleft'
. La sama validas por 'ctrl'
, 'alt'
kaj 'win'
kordoj; ili ĉiuj rilatas al la maldekstra-flanka ŝlosilo.
Tabelo 18-1.
PyKeyboard
Atributoj
Klavaro klavo ŝnuro
|
signifanta
|
---|---|
'a' , 'b' , 'c' , 'A' , 'B' , 'C' , '1' , '2' , '3' , '!' , '@' , '#' , Kaj tiel plu |
La klavoj por solaj karakteroj
|
'enter' (aŭ 'return' nek '\n' ) |
La ENENklavon ŝlosilo
|
'esc' |
La ESC klavo
|
'shiftleft' , 'shiftright' |
La maldekstra kaj dekstra klavoj MAJUSKLIGA klavoj
|
'altleft' , 'altright' |
La maldekstra kaj dekstra ALT klavoj
|
'ctrlleft' , 'ctrlright' |
La maldekstra kaj dekstra CTRL klavoj
|
'tab' (aŭ '\t' ) |
La TAB ŝlosilo
|
'backspace' , 'delete' |
La Backspace kaj DELETE klavoj
|
'pageup' , 'pagedown' |
La PAĜO UP kaj PAGE DOWN klavoj
|
'home' , 'end' |
La HEJMO kaj END klavoj
|
'up' , 'down' , 'left' ,'right' |
La supren, malsupren, forlasis, kaj dekstra sagoklavoj
|
'f1' , 'f2' , 'f3' , Kaj tiel plu |
La F1 al F12 klavojn
|
'volumemute' , 'volumedown' ,'volumeup' |
Mutulojn, volumo malsupren kaj volumeno supren klavoj (iuj klavaroj ne
havas tiujn klavojn, sed via mastruma sistemo ankoraŭ povos kompreni
tiujn simulita klavpremojName)
|
'pause' |
La paŭzo ŝlosilo
|
'capslock' , 'numlock' ,'scrolllock' |
La CAPS LOCK , NUM LOCK kaj SCROLL LOCK klavoj
|
'insert' |
La INS aŭ INSERT ŝlosilo
|
'printscreen' |
La PRTSC aŭ PRINT SCREEN ŝlosilo
|
'winleft' , 'winright' |
Maldekstre kaj dekstre WIN klavojn (en Vindozo)
|
'command' |
La Komando ( ) Ŝlosilo (sur OS X)
'option' La EBLO klavo (sur OS X) |
Premante kaj Releasing la Klavaro
Tre kiel la
mouseDown()
kaj mouseUp()
funkcioj, pyautogui.keyDown()
kaj pyautogui.keyUp()
sendos virtuala klavpremojName kaj ĝi liberigas al la komputilo. Ili pasis klavaron klavo ŝnuro (vidu Tabelo 18-1 ) por ilia argumento. Por conveniencia, PyAutoGUI provizas la pyautogui.press()
funkcio, kiu vokas ambaŭ de tiuj funkcioj por simuli kompletan klavpremo.
Kuri la sekvan kodon, kiu tajpas dolaro signo karakteron (akirita per premo de la klavoj MAJUSKLIGA ŝlosilon kaj premante 4):
>>> Pyautogui.keyDown ( 'ŝanĝo'); pyautogui.press ( '4'); pyautogui.keyUp ( 'ŝanĝo')
Tiu linio premas malsupren klavoj MAJUSKLIGA , gazetaroj (kaj eldonoj) 4, kaj tiam liberigas la klavoj MAJUSKLIGA . Se vi bezonas tajpi kordo en teksta kampo, la
typewrite()
funkcio estas pli taŭga. Sed por aplikaĵoj kiuj ununura-kerna komandoj, la press()
funkcio estas pli facila aliro.klavkomando kombinaĵoj
A klavkomando aŭ ŝparvojo estas kombino de klavpremojName alpreĝi iu apliko funkcion. La komuna klavkomando por kopiado selektado estas CTRL -C (sur Windows kaj Linux) aŭ ⌘-C (sur OS X). La uzanto premas kaj tenas la CTRL klavon, tiam premas la C ŝlosilo, kaj tiam liberigas la C kaj CTRL klavoj. Por fari tion kun PyAutoGUI la
keyDown()
kaj keyUp()
funkcioj, vi devus eniri la sekvaj:pyautogui.keyDown ( 'ctrl') pyautogui.keyDown ( 'c') pyautogui.keyUp ( 'c') pyautogui.keyUp ( 'ctrl')
Tio estas iom komplika. Anstataŭe, uzu la
pyautogui.hotkey()
funkcion, kiu prenas multoblajn klavaron klavo ĉeno argumentoj, premas ilin en ordo, kaj liberigas ilin en la inversa ordo. Por la CTRL -C ekzemplo, la kodo estus simple tiel:pyautogui.hotkey ( 'ctrl', 'c')
Tiu funkcio estas precipe utila por grandaj klavkomando kombinaĵoj. En Word, la CTRL - ALT - klavoj MAJUSKLIGA -s klavkomando kombino vidigas la stilo panelo. Anstataŭ fari ok malsamaj funkcio alvokoj (kvar
keyDown()
vokoj kaj kvar keyUp()
vokoj), vi povas simple nomi hotkey('ctrl', 'alt', 'shift', 's')
.
Kun
nova sencela dosiero redaktanto fenestro en la supra-maldekstra angulo
de via ekrano, tajpu la sekvajn en la interaga ŝelo (en OS X
anstataŭigenda
'alt'
per 'ctrl'
):>>> Import pyautogui, tempo >>> def commentAfterDelay (): ❶ pyautogui.click (100, 100) ❷ pyautogui.typewrite ( 'En sencela, Alt-3 komentoj ekstere de linio.) Time.sleep (2) ❸ pyautogui.hotkey ( 'alt', '3') >>> CommentAfterDelay ()
Ĉi tiu difinas funkcion
commentAfterDelay()
ke, kiam vokis, klaku la dosiero redaktanto fenestro por enporti en fokuso ❶, tipo En sencela, Atl-3 komentoj eksteren linion ❷, paŭzo por 2 sekundoj, kaj tiam simuli premante la ALT -3 klavkomando ( aŭ CTRL -3 sur OS X) ❸. Tiu klavaro ŝparvojo aldonas du # karakteroj al la nuna linio, komentante ĝin. (Tio estas utila lertaĵo scii kiam skribi vian propran kodon en sencela.)Revizio de la PyAutoGUI Funkcioj
Ekde tiu ĉapitro kovras multajn malsamajn funkciojn, jen rapidan resumon referenco:
moveTo(
x
,
y
)
. Movas la muson kursoron al la specifax
kajy
koordinatoj.moveRel(
xOffset
,
yOffset
)
. Movas la muson kursoron relativa al ĝia nuna pozicio.dragTo(
x
,
y
)
. Movas la muson kursoron dum la maldekstra butono estas tenita malsupren.dragRel(
xOffset
,
yOffset
)
. Movas la muson kursoron relativa al ĝia nuna pozicio dum la maldekstra butono estas tenita malsupren.click(
x
,
y
,
button
)
. Simulas klako (maldekstra butono defaŭlte).rightClick()
. Simulas dekstra butono klako.middleClick()
. Simulas meza butono klako.doubleClick()
. Simulas duobla maldekstra butono klako.mouseDown(
x
,
y
,
button
)
. Simulas albatis la donita butonon poziciox
,y
.mouseUp(
x
,
y
,
button
)
. Simulas liberigante la donita butonon poziciox
,y
.scroll(
units
)
. Simulas la ruluma rado. Pozitiva argumento rulumas supren; negativa argumento rulumas malsupren.typewrite(
message
)
. Tipoj la karakteroj en la donita mesaĝon ŝnuro.typewrite([
key1
,
key2
,
key3
])
. Tipoj la donita klavaron klavo kordoj.press(
key
)
. Premas la donita klavaron klavo ŝnuro.keyDown(
key
)
. Simulas albatis la donita klavaro klavo.keyUp(
key
)
. Simulas liberigante la donita klavaro klavo.hotkey([
key1
,
key2
,
key3
])
. Simulas premante la donita klavaron klavo kordoj malsupren en ordo kaj tiam liberigas ilin en inversa ordo.screenshot()
. Revenas ekrankopio kielImage
objekto. (Vidu Ĉapitro 17 por informo surImage
objektoj.)
Projekto: Aŭtomata Formo kompletigo
De ĉiuj enuigaj taskoj, plenigado formoj estas la plej timata de taskoj. Estas nur dece, ke nun, en la fina ĉapitro projekto, vi mortigos lin. Diru
vi havas grandegan kvanton de datumoj en ŝtono, kaj vi devas tede
Retajpu ĝin alian aplikon formon interfacon-maestro sen interna kaj
faros al vi. Kvankam iuj aplikoj havos Importi karakteriza
kiu permesos vin alŝuti kalkultabelo kun la informo, kelkfoje ŝajnas ke
ne ekzistas alia vojo ol mindlessly klakanta kaj tajpante por horoj sur
fino. Vi venis ĉi tien en tiu libro; vi scias, ke kompreneble ekzistas alia vojo.
Formo por tiu projekto estas Google Docs formo kiun vi povas trovi ĉe http://autbor.com/form . Ĝi aspektas kiel Figuro 18-4 .
Figuro 18-4. La formo uzata por tiu projekto
Je alta nivelo, jen kion via programo faru,
- Klaki la unuan tekstujon de la formo.
- Movi tra la formularo, tajpante informo en ĉiu kampo.
- Klaku Submetu butonon.
- Ripeti la procezon kun la sekvanta aro de datumoj.
Tio signifas via kodo devos fari la sekvan:
- Voku
pyautogui.click()
alklaki la formo kaj Submetu butonon. - Voku
pyautogui.typewrite()
eniri teksto sur la kampon. - Manipuli la
KeyboardInterrupt
escepto tiel la uzanto povas premi CTRL -C esi.
Malfermi novan dosieron redaktanto fenestro kaj savi ĝin kiel formFiller.py .
Paŝo 1: Figuro El la Paŝoj
Antaŭ skribi kodon, vi devas diveni la ĝusta keystrokes kaj musklakoj kiu plenigos la formularon unufoje. La mouseNow.py skripto en Projekto: "Kie Estas la Muso Dekstra Now?" Povas helpi vin eltrovi specifajn muso koordinatoj. Vi devas scii nur la koordinatoj de la unua teksto kampo. Post klako al la unua kampo, vi povas simple premi TAB movi fokuson al la sekva kampo. Ĉi savos vin de devi eltrovi la x- kaj y-koordinatoj klaki por ĉiu kampo.
Jen la paŝojn por eniri datumojn en la formo:
- Klaku Nomo kampo. (Uzo mouseNow.py determini la koordinatojn post maximizando la retumilo fenestro. La OS X, vi eble bezonas klaki dufoje: tuj metis la retumilon en fokuso kaj denove alklaki la nomo kampo.)
- Tajpu nomon kaj tiam premu la TABAN klavon .
- Tajpi plej granda timo kaj poste premu la TABAN klavon .
- Premu la malsupren sago ŝlosilo la korektan nombron da fojoj por elekti la sorĉisto energifonto: unufoje por sceptron , dufoje por amuleto , tri fojojn por kristala pilko , kaj kvar fojojn por mono . Tiam premu TAB . (Notu, ke sur OS X, vi devos premi la malsupren sago ŝlosilo pli tempo por ĉiu eblo. Por iuj retumiloj, vi bezonas premi la ENENklavon ŝlosilo ankaŭ.)
- Premu la dekstran sago ŝlosilo por elekti la respondon al la Robocop demando. Premu ĝin unufoje por 2 , dufoje por 3 , trifoje por 4 aŭ kvar fojojn por 5 ; aŭ premi la spacebar elekti 1 (kiu reliefigis defaŭlte). Tiam premu TAB .
- Tajpi plia komento kaj tiam premu la TABAN klavon .
- Premu la ENENklavon ŝlosilon al "klaki" la Submetu butonon.
- Post sendado formo, la retumilo prenos vin al paĝo kie vi bezonos klaki ligilon por reveni al la formularo paĝo.
Notu
ke se vi kuros ĉi programo denove poste, vi devas ĝisdatigi la musklako
koordinatoj, ĉar la retumilo fenestro povintus ŝanĝis pozicion. Labori ĉirkaŭ tiu, ĉiam certigi la retumilo fenestro maximiza antaŭ trovi la koordinatojn de la unua formo kampo. Ankaŭ,
malsamaj retumiloj en malsamaj mastrumaj sistemoj povus labori iomete
malsame de la paŝoj donita tie, do kontrolu ke tiuj klavofrapo
kombinaĵoj laboras por via komputilo antaux kurante via programo.
Paŝo 2: Aro Supren Koordinatoj
Montru la ekzemplo formas vi elŝutis ( Figuro 18-4 ) en retumilo kaj maksimumigi via retumilo fenestro. Malfermi novan Terminal aŭ komandlinio fenestro kuri la mouseNow.py skripto, kaj tiam muson super la nomo kampo elkompreni lia la x- kaj y-koordinatoj. Tiuj nombroj estos asignita al la
nameField
variablo en via programo. Ankaŭ, eltrovi la x- kaj y-koordinatoj kaj RGB opo valoro de la blua Submetu butonon. Tiuj valoroj estos atribuita al la submitButton
kaj submitButtonColor
variabloj, respektive.
Sekva, plenigu iuj maniquí datumoj por la formo kaj klaku Submetu . Vi devas vidi kion la sekvanta paĝo aspektas tiel ke vi povas uzi mouseNow.py trovi la koordinatojn de la Proponu alian respondon ligilon sur tiun novan paĝon.
Fari vian fontkodon rigardon kiel la sekvaj, esti certa por anstataŭi
ĉiujn valorojn en kursivo kun la koordinatoj vi decidita de via propra
provoj:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. importado pyautogui, tempo # Metu tiujn al la ĝentilaj koordinatoj por via komputilo. nameField = ( 648 , 319 ) submitButton = ( 651 , 817 ) submitButtonColor = ( 75 , 141 , 249 ) submitAnotherLink = ( 760 , 224 ) # TODO: Donu la uzanto ŝancon mortigi la skripto. # TODO: Atendu ĝis la formon paĝo ŝarĝis. # TODO: Plenigu la nomo Kampo. # TODO: Plenigu la Greatest Fear (j) kampo. # TODO: Plenigu la Fonto de Sorĉisto Potencoj kampo. # TODO: Plenigu la Robocop kampo. # TODO: Plenigu la Kromaj Komentoj kampo. # TODO Klaku Proponu. # TODO: Atendu ĝis formo paĝo ŝarĝis. # TODO: Klaku la Proponu alian respondon ligilon.
Nun vi bezonas la datumojn vi vere volas eniri en tiun formon. En
la reala mondo, tiu datumo povus veni de kalkultabelo, la
teksto-dosiero, aŭ retejo, kaj ĝi postulas plian kodon ŝarĝi en la
programo. Sed por tiu projekto, vi nur hardcode ĉiuj ĉi tiuj datumoj en variablo. Aldonu la jenan al via programo:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. - Snip - formData = [{ 'nomo': 'Alico', 'timo': 'spionoj', 'fonto': 'wand', 'RoboCop' 4, 'komentoj': 'Diru Bob Mi diris hi.'}, { ' nomo ':' Bob ',' timo ':' abeloj ',' fonto ':' amuleto ',' RoboCop '4, ' komentoj ': n / a'}, { 'nomo': 'Carol', ' timo ':' pupoj ',' fonto ':' kristala bulo ', ' RoboCop '1' komentoj ':' Bonvolu preni la pupoj el la paŭzo ĉambro. '}, {' nomo ':' Alex Murphy, 'timo': 'ED-209', 'fonto': 'mono', 'RoboCop' 5, 'komentoj': 'Protektu la senkulpajn. Servi la publikan konfidon. Firmigas la legxon. '}, ] - Snip -
La
formData
listo enhavas kvar vortaroj por kvar malsamaj nomoj. Ĉiu vortaro havas nomojn de teksto kampoj kiel ŝlosilojn kaj respondojn kiel valoroj. La lasta peco de agordo estas fiksita PyAutoGUI la PAUSE
variablo atendi duonan dua post ĉiu funkcio nomita. Aldonu la jenan al via programo post la formData
asigno komunikaĵo:pyautogui.PAUSE = 0,5
Paŝo 3: Komenco Tajpanta Datumoj
Al
for
buklo persisti super ĉiu de la vortaroj en la formData
listo, pasante la valorojn en la vortaro por la PyAutoGUI funkcioj kiuj praktike entajpu tekston kampoj.
Aldonu la sekvan kodon al via programo:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. - Snip - por persono en formData: # Doni la uzanto ŝancon mortigi la skripto. print ( '>>> 5 DUA detenas al LET USER GAZETARA CTRL-C <<<') ❶ time.sleep (5) # Atendu ĝis la formon paĝo ŝarĝis. ❷ dum ne pyautogui.pixelMatchesColor (submitButton [0], submitButton [1], submitButtonColor): time.sleep (0.5) - Snip -
Kiel malgranda sekureco karakterizaĵo, la skripto havas kvin-dua paŭzo ❶ kiu donas la uzanto ŝancon frapi CTRL -C (aŭ movi la muson kursoron al la supra-maldekstra angulo de la ekrano por levi la
FailSafeException
escepto) fermi la programon malsupren en kazo ĝi estas faranta ion neatenditan. Tiam la programo atendas ĝis la Submetu butonon La koloro estas videbla ❷, lasanta la programo scias, ke la formo paĝo ŝarĝis. Memoru ke vi eltrovis lakunordigi kaj koloro informo en paŝo 2 kaj stokitaj en la submitButton
kaj submitButtonColor
variabloj. Uzi pixelMatchesColor()
, vi pasas la koordinatoj submitButton[0]
kaj submitButton[1]
, kaj la koloro submitButtonColor
.
Post la kodo kiu atendas ĝis la Submetu butonon La koloro estas videbla, aldonu la sekvan:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. - Snip - ❶ print ( 'Enirante% s info ...'% (persono [ 'nomo'])) ❷ pyautogui.click (nameField [0], nameField [1]) # Plenigu la nomo kampo. ❸ pyautogui.typewrite (persono [ 'nomo'] + '\ t') # Plenigu la Greatest Fear (j) kampo. ❹ pyautogui.typewrite (persono [ 'timo'] + '\ t') - Snip -
Ni aldonu foja
print()
alvoko por montri la programon statuson en lia Terminal fenestro lasi la uzanton scii kio okazas ❶.
Ekde la programo scias, ke la formo estas ŝarĝita, estas tempo por voki
click()
al klaku Nomo kampo ❷ kaj typewrite()
eniri la ĉenon en person['name']
❸. La '\t'
karaktero estas aldonita al la fino de la ĉeno pasis al typewrite()
simuli premante TAB , kiu movas la klavaran fokuson al la sekva kampo, Greatest Fear (j). Alia alvoko al typewrite()
tajpos la ĉenon en person['fear']
en tiu kampo kaj tiam langeto por la proksima kampo en la formo ❹.Paŝo 4: Handle Elektu Listoj kaj Radio Butonoj
La
falmenuo por la "sorĉisto potencoj" demando kaj la radioaparato butonoj
por la Robocop kampo estas pli delikata manipuli ol la teksto kampoj. Musklaki tiuj ebloj kun la muso, vi devus diveni la x- kaj y-koordinatoj de ĉiu ebla eblo. Pli facilas uzi la klavaron sagoklavoj fari elekton anstataŭe.
Aldonu la jenan al via programo:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. - Snip - # Plenigu la Fonto de Sorĉisto Potencoj kampo. ❶ se persono [ 'fonton'] == 'wand': ❷ pyautogui.typewrite ([ 'malsupren', '\ t']) elif persono [ 'fonton'] == ' amuleto ': pyautogui.typewrite ([' malsupren ',' malsupren ',' \ t ']) elif persono [' fonton '] ==' kristala pilko ': pyautogui.typewrite ([' malsupren ',' malsupren ',' malsupren ',' \ t ']) elif persono [' fonton '] ==' mono ': pyautogui.typewrite ([' malsupren ',' malsupren ',' malsupren ',' malsupren ',' \ t ']) # Plenigu la Robocop kampo. ❸ se persono [ 'RoboCop'] == 1: ❹ pyautogui.typewrite ([ '', '\ t']) elif persono [ 'RoboCop'] == 2: pyautogui.typewrite ([ 'dekstra', '\ t']) elif persono [ 'RoboCop'] == 3: pyautogui.typewrite ([ 'dekstra', 'dekstra', '\ t']) elif persono [ 'RoboCop'] == 4 : pyautogui.typewrite ([ 'dekstra', 'dekstra', 'dekstra', '\ t']) elif persono [ 'RoboCop'] == 5: pyautogui.typewrite ([ 'dekstra', 'dekstra', 'dekstra ',' dekstra ',' \ t ']) - Snip -
Iam la falmenuo havas fokuson (memoru ke vi skribis kodon simuli premante TAB
post plenigado la Greatest Fear (j) kampo), premante la malsupren sago
ŝlosilo movos al la sekva elemento en la selektado listo. Depende de la valoro en
person['source']
via programo sendu kelkajn malsupren sago klavpremojName antaŭ tabbing al la sekva kampo. Se la valoro je la 'source'
ŝlosilo en ĉi uzanto vortaro estas 'wand'
❶, ni ŝajnigas premante la malsupren sago ŝlosilo unufoje (elekti Wand ) kaj premante TAB ❷. Se la valoro je la 'source'
ŝlosilo estas 'amulet'
, ni ŝajnigas premante la malsupren sago ŝlosilo dufoje kaj premante TAB , kaj simile por la aliaj eblaj respondoj.
La radioaparato butonoj por la Robocop demando povas esti selektita kun
la dekstra sagoklavoj-aŭ, se vi volas elekti la unuan elekton ❸, por
nur premante la spacebar ❹.
Paŝo 5: Submit la Formo kaj Wait
Vi povas plenigi la Kromaj Komentoj kampo kun la
typewrite()
funkcio pasante person['comments']
kiel argumento. Vi povas tajpi plia '\t'
movi la klavaran fokuson al la sekva kampo aŭ la Submetu butonon. Iam la Submetu butono estas en fokuso, voko pyautogui.press('enter')
simulos premante la ENENklavon ŝlosilon kaj submeti la formo. Post sendado formo, via programo atendos kvin sekundojn por la sekva paĝo ŝarĝi.
Iam la nova paĝo ŝarĝis, ĝi havos Proponu alian respondon ligilon kiu direktos la retumilo al nova, malplena formo paĝon. Vi stokitaj la koordinatoj de tiu ligo kiel opo en
submitAnotherLink
en paŝo 2, do pasi tiuj koordinatoj por pyautogui.click()
alklaki ĉi ligon.
Kun la nova formo preta iri, la skripto de ekstera
for
buklo povas daŭrigi al la sekva ripeto kaj eniri la sekva persono informo en formo.
Kompletigi vian programon aldonante la sekvan kodon:
#! python3 # FormFiller.py - Aŭtomate plenigas en la formo. - Snip - # Plenigu la Kromaj Komentoj kampo. Pyautogui.typewrite (persono [ 'komentoj'] + '\ t') # Alklaku Proponu. Pyautogui.press ( 'eniri') # Atendu ĝis formo paĝo ŝarĝis. Print ( 'klakis Proponu.') Time.sleep (5) # Alklaku la Proponu alian respondon ligilon. Pyautogui.click (submitAnotherLink [0], submitAnotherLink [1])
Iam la ĉefa
for
buklo finis, la programo estos ŝtopita en la informo por ĉiu persono. En tiu ekzemplo, estas nur kvar personoj eniri. Sed se vi havis 4.000 personoj, tiam skribi programon por fari ĉi savus vin multa tempo kaj tajpadon!resumo
GUI aŭtomatigo kun la
pyautogui
modulo permesas interagi kun aplikoj sur via komputilo de kontrolanta la muson kaj klavaron. Dum
tiu aliro estas fleksebla sufiĉa por fari ion ke homa uzanto povas
fari, la malavantaĝo estas ke tiuj programoj estas sufiĉe blinda por
kion ili alklako aŭ tajpadon. Verkante GUI aŭtomatigo programoj, provi certigi ke ili kraŝos rapide se ili estas donita malbona instrukcioj. Plorkriado estas ĝena, sed estas multe pli bone ol la programo daŭrigi en eraro.
Vi povas movi la muson kursoron ĉirkaŭ la ekrano kaj simuli musklakoj, pulsbatoj kaj klavkombinojn per PyAutoGUI. La
pyautogui
modulo
povas ankaŭ kontroli la koloroj sur la ekrano, kiu povas disponigi vian
GUI aŭtomatigo programo kun sufiĉe de ideo de la ekrano enhavo scii ĉu
ĝi alvenis offtrack. Vi povas eĉ doni PyAutoGUI ekrano-pafita kaj lasu ĝin diveni la koordinatoj de la areo vi volas klaki.
Vi povas kombini ĉiujn tiujn PyAutoGUI trajtoj aŭtomatigi ajna mindlessly repetitivos taskon sur via komputilo. Fakte,
ĝi povas esti downright hipnota rigardi la muskursoro movon sur lia
propra kaj vidi teksto aperas sur la ekrano aŭtomate. Kial ne perdi tempon vi savis por sidi kaj rigardi vian programon faru cxiujn viajn aferojn por vi? Ekzistas certaj kontento kiu venas de vidi kiel via lerteco savis vin el la enuaj.
praktiko Demandoj
Q:
|
1. Kiel vi povas deĉenigi PyAutoGUI la malsukcesos sekure halti programon?
|
Q:
|
2. Kio redonas la aktualan
resolution() ? |
Q:
|
3. Kio redonas la koordinatojn por la muskursoro aktuala pozicio?
|
Q:
|
4. Kio estas la diferenco inter
pyautogui.moveTo() kaj pyautogui.moveRel() ? |
Q:
|
5. Kio funkcioj povas esti uzata por treni la muson?
|
Q:
|
6. Kio funkcio alvoko tajpi el la karakteroj de
"Hello world!" ? |
Q:
|
7. Kiel vi povas fari klavpremojName por specialaj klavoj kiel la klavaro la maldekstra sago ŝlosilo?
|
Q:
|
8. Kiel vi povas savi la nunan enhavon de la ekrano al dosiero Dosiero nomita screenshot.png ?
|
Q:
|
9. Kion kodo metus du dua paŭzo post ĉiu PyAutoGUI funkcio alvokon?
|
praktiko Projektoj
Por praktiko, skribi programojn kiuj faras la sekvan.
rigardante Busy
Multaj
tujmesaĝiloj determini ĉu vi estas, mallaboruloj, aŭ for de via
komputilo, detektante manko de muso movado super iu periodo de
tempo-diru, dek minutojn. Eble vi ŝatus ŝteliri for de via
skribtablo por momento sed ne volas ke aliaj vidu viajn tujmesaĝilo
statuso iri en sencela maniero. Skribi skripton al nudge vian muson kursoron iomete ĉiu dek sekundoj. La
puŝeto devus esti sufiĉe malgranda por ke ĝi ne akiras en la vojo se vi
hazarde bezonas uzi vian komputilon dum la skripto kuras.
Instant Messenger Bot
Google
Talk, Skype, Yahoo! Messenger, AIM, kaj aliaj tujmesaĝilo aplikoj ofte
uzas proprietajn protokolojn kiuj faras ĝin malfacila por aliaj skribi
Python moduloj kiuj povas interagi kun tiuj programoj. Sed eĉ tiuj proprietaj protokoloj povas halti vin de skribi GUI aŭtomatigo ilo.
Google
Talk apliko havas serĉo trinkejo kiu permesas eniri salutnomon sur via
amiko lerta kaj malfermi mesaĝado fenestro kiam vi premas ENTER . La klavaran fokuson aŭtomate movas al la nova fenestro. Aliaj tujmesaĝilo aplikoj havas similajn vojojn malfermi novan mesaĝon fenestroj. Skribi programon kiu aŭtomate sendas sciigo mesaĝon al unuaranga grupo de personoj sur via amiko listo. Via
programo povas devi trakti esceptaj kazoj, kiel amikoj esti offline, la
babilejo fenestro aperante en malsamaj koordinatoj sur la ekrano, aŭ
konfirmo skatoloj kiuj interrompas vian mesaĝado. Via
programo devos preni ekrano-pafoj por gvidi lian GUI interago kaj adopti
manierojn detekti kiam lia virtuala pulsbatoj ne estas estanta sendita.
noto
Vi eble volos starigi iu falsa testo kontoj por ke vi ne hazarde spamo vian realan amikoj dum skribanta ĉi programo.
Ludo-Playing Bot Tutorial
Estas granda lernilo titolita "Kiel Konstrui Python Bot Kiu Povas Ludi TTT Ludoj" ke vi povas trovi ĉe http://nostarch.com/automatestuff/ . Ĉi lernilon klarigas kiel krei GUI aŭtomatigo programo en Python kiu ludas Flash ludo nomita Sushi Go Round. La ludo implikas klakante la korekta ingredienco butonoj plenigi klientoj suŝion ordonoj. La rapida vi plenigi ordonoj sen eraroj, la pli punktoj vi akiras. Jen perfekte taŭgas tasko por GUI aŭtomatigo programo-kaj manieron trompi al alta poentaro! La
lernilo kovras multajn el la samaj temoj kiuj ĉi ĉapitro portitaj sed
ankaŭ inkludas priskribojn de PyAutoGUI baza bildo rekono
karakterizaĵoj.
Nenhum comentário:
Postar um comentário