எனது முந்தைய நிறுவனத்தில், Twitter, LinkedIn, Mastodon, Bluesky, Reddit போன்ற சமூக ஊடகங்களில் உள்ள அளவீடுகளைக் கண்காணிக்கும் ஒரு தொகுதி வேலையை நான் உருவாக்கினேன். பிறகு எனது சொந்த "ஆளுமைக்காக" அதை நகலெடுக்க முடியும் என்பதை உணர்ந்தேன். பிரச்சனை என்னவென்றால், சில மீடியாக்கள் நான் விரும்பும் அளவீடுகளுக்கு HTTP API ஐ வழங்கவில்லை. LinkedIn இல் நான் விரும்பும் அளவீடுகள் இதோ:
நான் நீண்ட நேரம் தேடினேன், ஆனால் மேலே உள்ள அளவீடுகளுக்கான API அணுகல் கிடைக்கவில்லை. நான் நீண்ட நேரம் தினமும் காலையில் மெட்ரிக்குகளை கைமுறையாக ஸ்கிராப் செய்தேன், இறுதியாக இந்த கடினமான பணியை தானியக்கமாக்க முடிவு செய்தேன். நான் கற்றுக்கொண்டது இதோ.
வேலை பைத்தானில் உள்ளது, எனவே நான் அதே தொழில்நுட்ப அடுக்கில் இருக்க விரும்புகிறேன். விரைவான ஆராய்ச்சிக்குப் பிறகு, Python உட்பட இரண்டு மொழி APIகளைக் கொண்ட Playwright என்ற உலாவி ஆட்டோமேஷன் கருவியைக் கண்டுபிடித்தேன். ப்ளேரைட்டின் முதன்மைப் பயன்பாட்டு வழக்கு எண்ட்-டு-எண்ட் சோதனை, ஆனால் இது சோதனை சூழலுக்கு வெளியே உலாவியை நிர்வகிக்கலாம்.
சார்புகளை நிர்வகிக்க நான் கவிதையைப் பயன்படுத்துகிறேன். நாடக ஆசிரியரை நிறுவுவது மிகவும் எளிதானது:
poetry add playwright
இந்த கட்டத்தில், பிளேரைட் பயன்படுத்த தயாராக உள்ளது. இது இரண்டு தனித்துவமான 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
playwright
ஆசிரியரைப் பெறுங்கள்.
உலாவி நிகழ்வைத் தொடங்கவும். பல உலாவி வகைகள் உள்ளன; நான் ஒரு விருப்பத்தின் பேரில் Chromium ஐத் தேர்ந்தெடுத்தேன். நீங்கள் குறிப்பிட்ட உலாவியை முன்பே நிறுவியிருக்க வேண்டும் என்பதை நினைவில் கொள்ளவும், அதாவது , playwright install --with-deps chromium
.
முன்னிருப்பாக, உலாவி தலையில்லாமல் திறக்கும் ; அது காட்டப்படவில்லை. எளிதாக பிழைத்திருத்தம் செய்ய தொடக்கத்தில் அதைத் தெரியும்படி இயக்குமாறு அறிவுறுத்துகிறேன்: headless = True
.
புதிய உலாவி சாளரத்தைத் திறக்கவும்.
புதிய இடத்திற்கு செல்லவும்.
குறிப்பிட்ட உள்ளீட்டு புலங்களைக் கண்டறிந்து அவற்றை எனது சான்றுகளுடன் நிரப்பவும்.
குறிப்பிட்ட பொத்தானைக் கண்டுபிடித்து அதை அழுத்தவும்.
அனைத்து குறிப்பிட்ட கூறுகளையும் கண்டறியவும்.
முதல் உறுப்பின் உள் உரையைப் பெறவும்.
சுத்தம் செய்ய உலாவியை மூடு.
மேலே சொன்னவை எதிர்பார்த்தபடியே வேலை செய்தன. நான் ஸ்கிரிப்டை இயக்கும் ஒவ்வொரு முறையும் லிங்க்ட்இனிலிருந்து மின்னஞ்சலைப் பெறுவதுதான் ஒரே குறை:
ஹாய் நிக்கோலஸ்,
புதிய சாதனமான HeadlessChrome, <OS> இல் <city>, <region>, <country> இல் என்னை ஞாபகப்படுத்து என்பதை வெற்றிகரமாகச் செயல்படுத்தியுள்ளீர்கள். ஒரு சாதனத்தில் என்னை ஞாபகப்படுத்துவது எப்படி வேலை செய்கிறது என்பதைப் பற்றி மேலும் அறிக.
ஜாவாக்ரோ மாநாட்டில் நான் ஃபேபியன் வவுசெல்ஸையும் சந்தித்தேன். அவர் வெப் ஸ்கிராப்பிங்கில் நிபுணத்துவம் பெற்றவர், மேலும் இந்தத் துறையில் உள்ள பெரும்பாலானவர்கள் உலாவி சுயவிவரங்களைப் பயன்படுத்துகிறார்கள் என்று என்னிடம் கூறினார். உண்மையில், நீங்கள் 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()
பிளேரைட் குறிப்பிட்ட கோப்புறையில் சுயவிவரத்தை சேமித்து, ரன்களில் அதை மீண்டும் பயன்படுத்துவார்.
விதிவிலக்கு கையாளுதலை மேம்படுத்தவும்.
BrowserContext
பக்கங்களையும் திறக்க முடியும்.
டாஷ்போர்டிற்கு செல்ல முயற்சிக்கிறோம். நாங்கள் அங்கீகரிக்கப்படாவிட்டால் லிங்க்ட்இன் எங்களை உள்நுழைவு பக்கத்திற்கு திருப்பிவிடும்; நாம் பின்னர் அங்கீகரிக்க முடியும்.
விளைவு எதுவாக இருந்தாலும் சூழலை மூடு.
இந்த கட்டத்தில், இரண்டு சான்றுகளையும் முதல் முறையாக நாங்கள் அங்கீகரிக்க வேண்டும். அடுத்தடுத்த ரன்களில், அது சார்ந்துள்ளது.
மேலே உள்ள குறியீடு நம்பகத்தன்மையுடன் செயல்படாததைக் கண்டு நான் ஆச்சரியப்பட்டேன். இது முதல் ஓட்டத்திலும் சில சமயங்களில் அடுத்தடுத்தவற்றிலும் வேலை செய்தது. நான் உலாவி சுயவிவரத்தை ரன்களில் சேமித்து வருவதால், நான் அங்கீகரிக்க வேண்டியிருக்கும் போது, 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'))
நான் பைத்தானில் நிபுணன் இல்லை என்றாலும், பிளேரைட் மூலம் நான் விரும்பியதை அடைய முடிந்தது. நான் ஒத்திசைவு API ஐப் பயன்படுத்த விரும்பினேன், ஏனெனில் இது குறியீட்டை நியாயப்படுத்துவதைச் சற்று எளிதாக்குகிறது, மேலும் செயல்திறன் தேவைகள் எதுவும் என்னிடம் இல்லை. நான் பிளேரைட் வழங்கும் அடிப்படை அம்சங்களை மட்டுமே பயன்படுத்தினேன். ப்ளேரைட் சோதனைகளின் சூழலில் வீடியோக்களை பதிவு செய்ய அனுமதிக்கிறது, இது CI பைப்லைனை செயல்படுத்தும் போது ஒரு சோதனை தோல்வியடையும் போது மிகவும் பயனுள்ளதாக இருக்கும்.
மேலும் செல்ல:
ஜனவரி 19, 2024 அன்று ஜாவா கீக்கில் முதலில் வெளியிடப்பட்டது