paint-brush
Драматург: Қадамҳои аввалини ман бо абзори автоматикунонии браузераз ҷониби@nfrankel
512 хониш
512 хониш

Драматург: Қадамҳои аввалини ман бо абзори автоматикунонии браузер

аз ҷониби Nicolas Fränkel
Nicolas Fränkel HackerNoon profile picture

Nicolas Fränkel

@nfrankel

Developer Advocate, eternal learner, author

7 дақ read2025/01/26
Read on Terminal Reader
Read this story in a terminal
Print this story
tldt arrow
tg-flagTG
Ин қиссаро бо забони тоҷикӣ хонед!
en-flagEN
Read this story in the original language, English!
de-flagDE
Lesen Sie diese Geschichte auf Deutsch!
es-flagES
Lee esta historia en Español!
vi-flagVI
Đọc bài viết này bằng tiếng Việt!
ja-flagJA
この物語を日本語で読んでください!
bs-flagBS
Pročitajte ovu priču na bosanskom!
sr-flagSR
Прочитајте ову причу на српском!
so-flagSO
Sheekadan Af-Soomaali ku akhri!
lv-flagLV
Izlasi šo stāstu latviešu valodā!
lo-flagLO
ອ່ານເລື່ອງນີ້ເປັນພາສາລາວ!
ta-flagTA
இந்த கதையை தமிழில் படியுங்கள்!
th-flagTH
อ่านเรื่องนี้เป็นภาษาไทย!
TG

Хеле дароз; Хондан

Баъзе васоити ахбори омма HTTP API-ро барои ченакҳое, ки ман мехоҳам, таъмин намекунанд. Playwright як воситаи автоматикунонии браузер бо якчанд API-ҳои забонӣ, аз ҷумла Python мебошад. Он ду API-и гуногунро пешниҳод мекунад, яке синхронӣ ва дигаре асинхронӣ.
featured image - Драматург: Қадамҳои аввалини ман бо абзори автоматикунонии браузер
Nicolas Fränkel HackerNoon profile picture
Nicolas Fränkel

Nicolas Fränkel

@nfrankel

Developer Advocate, eternal learner, author

Дар ширкати қаблии худ, ман як кори дастаҷамъие таҳия кардам, ки ченакҳоро дар шабакаҳои иҷтимоӣ, аз қабили Twitter, LinkedIn, Mastodon, Bluesky, Reddit ва ғайра пайгирӣ мекард. Сипас ман фаҳмидам, ки метавонам онро барои "шахси" худам такрор кунам. Мушкилот дар он аст, ки баъзе васоити ахбори омма HTTP API-ро барои ченакҳое, ки ман мехоҳам, таъмин намекунанд. Инҳо ченакҳое ҳастанд, ки ман дар LinkedIn мехоҳам:


Панели ченакҳои LinkedIn

Панели ченакҳои LinkedIn


Ман муддати тӯлонӣ ҷустуҷӯ кардам, аммо дастрасии API-ро барои ченакҳои дар боло зикршуда наёфтам. Ман ҳар саҳар муддати тӯлонӣ метрикаҳоро дастӣ мебурдам ва ниҳоят тасмим гирифтам, ки ин вазифаи дилгиркунандаро автоматӣ кунам. Ин аст он чизе ки ман омӯхтам.

Контекст

Кор дар Python аст, бинобар ин ман мехоҳам дар ҳамон стек технологӣ бимонам. Пас аз як таҳқиқоти зуд, ман Playwright , як абзори автоматикунонии браузерро бо якчанд API-ҳои забонӣ, аз ҷумла Python пайдо кардам. Ҳолати асосии истифодаи драматург ин санҷиши ниҳоӣ мебошад, аммо он инчунин метавонад браузерро берун аз контексти санҷиш идора кунад.


Ман Poetry-ро барои идора кардани вобастагӣ истифода мебарам. Насб кардани Playwright чунон осон аст:


 poetry add playwright


Дар айни замон, драматург барои истифода омода аст. Он ду API-и гуногунро пешниҳод мекунад, яке синхронӣ ва дигаре асинхронӣ . Аз сабаби истифодаи ман, маззаи аввал беш аз кофӣ аст.

Пойхоямро тар кардан

Ман мехоҳам, ки тадриҷан ба рушд наздик шавам.


Ин аст иқтибос аз API:


Иқтибос аз модели API

Иқтибос аз модели API


Он ба рамзи зерин тарҷума мешавад:


 from playwright.sync_api import Browser, Locator, Page, sync_playwright with (sync_playwright() as pw): #1 browser: Browser = pw.chromium.launch() #2 page: Page = browser.new_page() #3 page.goto('https://www.linkedin.com/login') #4 page.locator('#username').press_sequentially(getenv('LINKEDIN_USERNAME')) #5 page.locator('#password').press_sequentially(getenv('LINKEDIN_PASSWORD')) #5 page.locator('button[type=submit]').press('Enter') #6 page.goto('https://www.linkedin.com/dashboard/') #4 metrics_container: Locator = page.locator('.pcd-analytic-view-items-container') metrics: List[Locator] = metrics_container.locator('p.text-body-large-bold').all() #7 impressions = atoi(metrics[0].inner_text()) #8 # Get other metrics browser.close() #9
  1. Объекти playwright гиред.


  2. Як мисоли браузерро оғоз кунед. Намудҳои зиёди браузерҳо мавҷуданд; Ман Chromium-ро бо хоҳиши худ интихоб кардам. Дар хотир доред, ки шумо бояд қаблан браузери мушаххасро насб карда будед, яъне playwright install --with-deps chromium .


    Бо нобаёнӣ, браузер бе сар мекушояд; зоҳир намешавад. Ман маслиҳат медиҳам, ки онро дар аввал ба таври намоён иҷро кунед, то ислоҳи осонтар: headless = True .


  3. Равзанаи нави браузер кушоед.


  4. Ба макони нав гузаред.


  5. Майдонҳои вурудии муайяншударо ҷойгир кунед ва онҳоро бо маълумоти ман пур кунед.


  6. Тугмаи муайяншударо ҷойгир кунед ва онро пахш кунед.


  7. Ҳама унсурҳои муайяншударо ҷойгир кунед.


  8. Матни дохилии элементи якумро гиред.


  9. Барои тоза кардани браузер браузерро пӯшед.

Нигоҳ доштани кукиҳо

Корҳои дар боло зикршуда тавре кор карданд. Ягона нуқсон ин аст, ки ман ҳар дафъае, ки скриптро иҷро мекардам, аз LinkedIn паёми электронӣ гирифтам:


Салом Николас,


Шумо бомуваффақият фаъол кардаед Маро дар як дастгоҳи нави HeadlessChrome, <OS> дар <шаҳр>, <минтақа>, <кишвар> ёд кунед. Муфассалтар дар бораи чӣ гуна кор кардани маро дар ёд доред дар дастгоҳ.


Ман инчунин бо Фабиен Вочелес дар конфронси JavaCro вохӯрдам. Вай дар скрепинги веб тахассус дорад ва ба ман гуфт, ки аксари одамон дар ин соҳа профилҳои браузерро истифода мебаранд. Дарвоқеъ, агар шумо ба LinkedIn ворид шавед, шумо аломати аутентификатсияро ҳамчун кукиҳо нигоҳ медоред ва ба шумо лозим нест, ки онро пеш аз ба охир расидани мӯҳлати он дубора тасдиқ кунед. Хушбахтона, Playwright чунин хусусиятро бо усули launch_persistent_context худ пешниҳод мекунад.


Мо метавонем launch болоро бо зерин иваз кунем:


 with sync_playwright() as pw: playwright_profile_dir = f'{Path.home()}/.social-metrics/playwright-profile' context: BrowserContext = pw.chromium.launch_persistent_context(playwright_profile_dir) #1 try: #2 page: Page = context.new_page() #3 page.goto('https://www.linkedin.com/dashboard/') #4 if 'session_redirect' in page.url: #4 page.locator('#username').press_sequentially(getenv('LINKEDIN_USERNAME')) page.locator('#password').press_sequentially(getenv('LINKEDIN_PASSWORD')) page.locator('button[type=submit]').press('Enter') page.goto('https://www.linkedin.com/dashboard/') metrics_container: Locator = page.locator('.pcd-analytic-view-items-container') # Same as in the previous snippet except Exception as e: #2 logger.error(f'Could not fetch metrics: {e}') finally: #5 context.close()
  1. Драматург профилро дар папкаи муайяншуда нигоҳ медорад ва онро дар тамоми даврон дубора истифода мебарад.


  2. Муносибати истисноро такмил диҳед.


  3. BrowserContext инчунин метавонад саҳифаҳоро кушояд.


  4. Мо кӯшиш мекунем, ки ба панели идоракунӣ гузаред. LinkedIn моро ба саҳифаи воридшавӣ равона мекунад, агар мо тасдиқ нашавем; пас мо метавонем тасдиқ кунем.


  5. Новобаста аз натиҷа, контекстро пӯшед.


Дар ин лаҳза, ба мо лозим аст, ки бори аввал бо ҳарду маълумоти эътимоднома тасдиқ кунем. Дар марҳилаҳои минбаъда, он вобаста аст.

Мутобиқшавӣ ба воқеият

Ман ҳайрон шудам, ки рамзи боло боэътимод кор намекунад. Он дар давраи аввал ва баъзан дар марҳилаҳои минбаъда кор мекард. Азбаски ман профили браузерро дар саросари иҷро нигоҳ медорам, вақте ки ман бояд аутентификатсия кунам, LinkedIn танҳо паролро мепурсад, на воридшавӣ! Азбаски код кӯшиш мекунад, ки логинро ворид кунад, он дар ин ҳолат ноком мешавад. Ислоҳ хеле осон аст:


 username_field = page.locator('#username') if username_field.is_visible(): username_field.press_sequentially(getenv('LINKEDIN_USERNAME')) page.locator('#password').press_sequentially(getenv('LINKEDIN_PASSWORD'))

Хулоса

Гарчанде ки ман коршиноси Python нестам, ман тавонистам он чизеро, ки мехостам бо Драматург ба даст орам. Ман истифодаи API-и синхронизатсияро афзалтар донистам, зеро он рамзро каме осонтар мекунад, ки дар бораи он фикр кунам ва ман ягон талаботи иҷроиш надорам. Ман танҳо хусусиятҳои асосии пешниҳодкардаи драматург истифода кардам. Драматург имкон медиҳад, ки видеоҳоро дар заминаи санҷишҳо сабт кунад, ки ин ҳангоми нокомии санҷиш ҳангоми иҷрои лӯлаи CI хеле муфид аст.


Барои минбаъд рафтан:



Бори аввал дар A Java Geek 19 январи соли 2024 нашр шудааст

L O A D I N G
. . . comments & more!

About Author

Nicolas Fränkel HackerNoon profile picture
Nicolas Fränkel@nfrankel
Developer Advocate, eternal learner, author

ТЕГИ овезон кунед

ИН МАКОЛА ДАР...

Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite
Also published here
X REMOVE AD