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
sr-flagSR
Прочитајте ову причу на српском!
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!
tg-flagTG
Ин қиссаро бо забони тоҷикӣ хонед!
so-flagSO
Sheekadan Af-Soomaali ku akhri!
lv-flagLV
Izlasi šo stāstu latviešu valodā!
lo-flagLO
ອ່ານເລື່ອງນີ້ເປັນພາສາລາວ!
ta-flagTA
இந்த கதையை தமிழில் படியுங்கள்!
th-flagTH
อ่านเรื่องนี้เป็นภาษาไทย!
SR

Предуго; Читати

Неки медији не пружају ХТТП АПИ за метрику коју желим. Плаивригхт је алатка за аутоматизацију претраживача са неколико језичких АПИ-ја, укључујући Питхон. Нуди два различита АПИ-ја, један синхрони и један асинхрони.
featured image - Драмски писац: Моји први кораци са алатком за аутоматизацију претраживача
Nicolas Fränkel HackerNoon profile picture
Nicolas Fränkel

Nicolas Fränkel

@nfrankel

Developer Advocate, eternal learner, author

У својој претходној компанији, развио сам групни посао који је пратио метрику на друштвеним медијима, као што су Твитер, ЛинкедИн, Мастодон, Блуески, Реддит, итд. Онда сам схватио да могу да га дуплирам за своју „личност“. Проблем је у томе што неки медији не пружају ХТТП АПИ за метрику коју желим. Ево метрике које желим на ЛинкедИн-у:


ЛинкедИн метричка контролна табла

ЛинкедИн метричка контролна табла


Дуго сам тражио, али нисам нашао приступ АПИ-ју за горњу метрику. Сваког јутра сам дуго времена ручно стругао метрику и коначно одлучио да аутоматизујем овај досадан задатак. Ево шта сам научио.

Тхе Цонтект

Посао је у Питхон-у, тако да желим да останем у истој технолошкој групи. После брзог истраживања, пронашао сам Плаивригхт , алатку за аутоматизацију претраживача са неколико језичких АПИ-ја, укључујући Питхон. Примарни случај употребе Плаивригхт-а је тестирање од краја до краја, али такође може да управља прегледачем ван контекста тестирања.


Користим Поетри за управљање зависностима. Инсталирање Плаивригхт-а је једноставно као:


 poetry add playwright


У овом тренутку, Плаивригхт је спреман за употребу. Нуди два различита АПИ-ја, један синхрони и један асинхрони . Због мог случаја употребе, први укус је више него довољан.

Геттинг Ми Феет Вет

Волим да постепено приступам развоју.


Ево извода АПИ-ја:


Извод из АПИ модела

Извод из АПИ модела


Преводи се у следећи код:


 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. Покрените инстанцу претраживача. Доступно је више типова претраживача; Одабрао сам Цхромиум из хира. Имајте на уму да сте претходно требали инсталирати одређени претраживач, тј . playwright install --with-deps chromium .


    Подразумевано, претраживач се отвара без главе ; не појављује се. Саветовао бих да га покренете видљиво на почетку ради лакшег отклањања грешака: headless = True .


  3. Отворите нови прозор прегледача.


  4. Идите на нову локацију.


  5. Пронађите наведена поља за унос и попуните их мојим акредитивима.


  6. Пронађите одређено дугме и притисните га.


  7. Пронађите све наведене елементе.


  8. Добијте унутрашњи текст првог елемента.


  9. Затворите претраживач да бисте очистили.

Чување колачића

Горе наведено је радило како се очекивало. Једина мана је што сам добијао е-пошту од ЛинкедИн-а сваки пут када сам покренуо скрипту:


Здраво Николас,


Успешно сте активирали Запамти ме на новом уређају ХеадлессЦхроме, <ОС> у <град>, <регион>, <земља > . Сазнајте више о томе како Запамти ме ради на уређају.


Такође сам упознао Фабијена Вошела на конференцији ЈаваЦро . Специјализовао се за веб скрапинг и рекао ми је да већина људи у овој области користи профиле прегледача. Заиста, ако се пријавите на ЛинкедИн, добићете токен за аутентификацију сачуван као колачићи и нећете морати поново да га аутентификујете пре него што истекне. На срећу, Плаивригхт нуди такву функцију својом методом 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. Покушавамо да дођемо до контролне табле. ЛинкедИн ће нас преусмерити на страницу за пријаву ако нисмо аутентификовани; онда можемо да потврдимо аутентичност.


  5. Затворите контекст без обзира на исход.


У овом тренутку, потребно је само да се аутентификујемо са оба акредитива први пут. О наредним трчањима, зависи.

Прилагођавање стварности

Био сам изненађен када сам видео да горњи код не ради поуздано. Успело је у првој вожњи, а понекад иу наредним. Пошто складиштим профил прегледача у свим радњама, када треба да се аутентификујем, ЛинкедИн тражи само лозинку, а не и пријаву! Пошто код покушава да унесе пријаву, у овом случају не успева. Решење је прилично једноставно:


 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'))

Закључак

Иако нисам стручњак за Питхон, успео сам да постигнем оно што сам желео са Дрампистом. Више сам волео да користим АПИ за синхронизацију јер он чини код мало лакшим за размишљање, а немам никакве захтеве за перформансама. Користио сам само основне функције које нуди Плаивригхт. Плаивригхт дозвољава снимање видео записа у контексту тестова, што је веома корисно када тест не успе током извршавања ЦИ цевовода.


Да идемо даље:



Првобитно објављено на А Јава Геек 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