செலினியத்தில் பொதுவான ஜாவாஸ்கிரிப்ட் பிழைகளைப் புரிந்துகொண்டு சரிசெய்தல்
உடன் வலை ஸ்கிராப்பிங் செய்யும் போது செலினியம் வெப்டிரைவர், ஜாவாஸ்கிரிப்ட் தொடர்பான பிழைகளை எதிர்கொள்வது அசாதாரணமானது அல்ல, குறிப்பாக டைனமிக் வலை கூறுகளை கையாளும் போது நிழல் DOMகள். டெவலப்பர்கள் அடிக்கடி சந்திக்கும் ஒரு பிழை ஜாவாஸ்கிரிப்ட் விதிவிலக்கு: பூஜ்யத்தின் பண்புகளைப் படிக்க முடியாது ('ஷாடோரூட்' படித்தல்), இது சிக்கலான பக்க உறுப்புகளுடன் தொடர்பு கொள்ளும்போது அடிக்கடி நிகழ்கிறது.
செலினியம் a உள்ளே உள்ள உறுப்புகளை அணுகவோ அல்லது தொடர்பு கொள்ளவோ முடியாதபோது இந்த பிழை பொதுவாக எழுகிறது நிழல் DOM, ஒரு தனித்துவமான வகை இணைக்கப்பட்ட DOM அமைப்பு பல நவீன வலைத்தளங்களால் சிறந்த மாடுலாரிட்டிக்காகப் பயன்படுத்தப்படுகிறது. பைத்தானில், உலாவியைக் கட்டுப்படுத்த செலினியத்தைப் பயன்படுத்துவது அத்தகைய கூறுகளுடன் தந்திரமானதாக இருக்கும்.
Shopee போன்ற தளங்களில் இருந்து வலை ஸ்கிராப்பிங் சூழலில், பாப்அப்கள் அல்லது பேனர்கள் பெரும்பாலும் நிழல் DOMகளைப் பயன்படுத்துகின்றன, அவை நிரல் ரீதியாக மூடுவதற்கு சவாலாக இருக்கலாம். இந்தச் சிக்கல் தானியங்கி பணிகளின் சீரான ஓட்டத்தைத் தடுக்கலாம் மற்றும் தரவு சேகரிப்பில் இடையூறு விளைவிக்கும்.
இந்த வழிகாட்டி ஒரு தெளிவான தீர்வு மூலம் உங்களை வழிநடத்தும் 'பூஜ்யத்தின் பண்புகளைப் படிக்க முடியாது' பிழை மற்றும் ஷோபீ பயன்படுத்தி ஷேடோ DOM களுக்குள் உட்பொதிக்கப்பட்ட பாப்அப்களை மூடுவதற்கான நடைமுறை அணுகுமுறையை வழங்குகிறது பைதான் செலினியம்.
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
shadowRoot | நிழல் DOM இல் உள்ள உறுப்புகளை அணுக இது பயன்படுகிறது. நிழல் DOM ஆனது முக்கிய DOM மரத்திலிருந்து சில கூறுகளை தனிமைப்படுத்துகிறது, அவற்றை அணுக நிழல் ரூட் சொத்து தேவைப்படுகிறது. இந்த ஸ்கிரிப்ட்டில், பாப்அப்பில் உள்ள மூடு பட்டனைக் கண்டறிய இது பயன்படுகிறது. |
execute_script() | இந்த செலினியம் முறையானது, உலாவி அமர்வில் ரா ஜாவாஸ்கிரிப்டை செயல்படுத்த அனுமதிக்கிறது. பாரம்பரிய செலினியம் முறைகள் வேலை செய்யாமல் போகலாம் என்பதால் நிழல் DOM உறுப்புகளுடன் தொடர்பு கொள்ளும்போது இது அவசியம். |
WebDriverWait() | இந்த கட்டளை செலினியத்தில் வெளிப்படையான காத்திருப்புகளை அமைக்கிறது. ஒரு உறுப்பு கிளிக் செய்யக்கூடியதாக மாறுவது போல, ஒரு குறிப்பிட்ட நிபந்தனை பூர்த்தியாகும் வரை ஸ்கிரிப்ட் காத்திருக்கிறது என்பதை இது உறுதி செய்கிறது. ஷாப்பியின் பாப்அப்களில் காணப்படுவது போல, டைனமிக் உள்ளடக்க ஏற்றுதலுக்கு இது முக்கியமானது. |
expected_conditions | இந்த தொகுதியானது WebDriverWait உடன் பயன்படுத்தக்கூடிய உறுப்புகளின் தெரிவுநிலை அல்லது இருப்பு போன்ற நிபந்தனைகளைக் கொண்டுள்ளது. இலக்கு கூறுகள் தயாராக இருக்கும்போது மட்டுமே கிளிக் செய்வது போன்ற செயல்பாடுகள் நிகழும் என்பதை இது உறுதி செய்கிறது. |
EC.presence_of_element_located() | இலக்கு உறுப்பு DOM இல் இருப்பதை உறுதிசெய்ய WebDriverWait உடன் பயன்படுத்தப்படும் நிபந்தனை. நிழல் DOM இல் உள்ள உறுப்புகள் ஏற்றப்படும் வரை காத்திருக்கும்போது இது மிகவும் உதவியாக இருக்கும். |
EC.element_to_be_clickable() | WebDriverWait உடன் மற்றொரு பயனுள்ள நிபந்தனை, இது இலக்கு உறுப்பு தெரியும் மற்றும் கிளிக் செய்யக்கூடியதாக இருப்பதை உறுதிசெய்கிறது. |
By.CSS_SELECTOR | இந்த முறை உறுப்புகளை அவற்றின் CSS தேர்வாளர்கள் மூலம் கண்டறிய அனுமதிக்கிறது. நிலையான XPath முறைகளைப் பயன்படுத்தி அணுக முடியாத நிழல் DOM இல் உள்ள உறுப்புகளை குறிவைக்கும் போது இது மிகவும் உதவியாக இருக்கும். |
driver.quit() | ஸ்கிரிப்ட் இயங்கி முடித்த பிறகு உலாவி நிகழ்வு சரியாக மூடப்பட்டிருப்பதை உறுதி செய்கிறது. திறந்த உலாவி அமர்வுகளைத் தவிர்ப்பது ஒரு முக்கியமான சிறந்த நடைமுறையாகும். |
செலினியம் வெப் ஸ்கிராப்பிங்கில் நிழல் DOM மற்றும் பாப்அப்களை எவ்வாறு கையாள்வது
மேலே கொடுக்கப்பட்டுள்ள ஸ்கிரிப்ட்கள் வலை ஸ்கிராப்பிங்கில் எதிர்கொள்ளும் பொதுவான சிக்கலைத் தீர்ப்பதை நோக்கமாகக் கொண்டுள்ளன செலினியம் வெப்டிரைவர் நிழல் DOM கூறுகளுடன் தொடர்பு கொள்ளும்போது. நிழல் DOM என்பது வலைப்பக்கத்தின் ஒரு பகுதியாகும், இது முக்கிய DOM இலிருந்து தனித்தனியாக இயங்குகிறது, இது பெரும்பாலும் சிக்கலான வலை கூறுகளில் பயன்படுத்தப்படுகிறது. Shopee போன்ற ஸ்கிராப்பிங் தளங்களின் சூழலில், நிழல் DOMகளுக்குள் பாப்அப்கள் அடிக்கடி தோன்றும், இது பாரம்பரிய செலினியம் முறைகளை அணுகினால் பிழைகள் ஏற்படலாம். முதல் ஸ்கிரிப்ட் ஜாவாஸ்கிரிப்ட் செயல்படுத்தலைப் பயன்படுத்தி பாப்அப்பை மூட வடிவமைக்கப்பட்டுள்ளது execute_script(), உலாவி சூழலில் மூல ஜாவாஸ்கிரிப்டை இயக்க செலினியத்தை அனுமதிக்கும் சக்திவாய்ந்த கருவி.
முக்கிய சவால் என்னவென்றால், நிழல் DOM இன் உறுப்புகள் பொதுவான செலினியம் கட்டளைகளுடன் அணுக முடியாது. find_element_by_xpath(). அதற்கு பதிலாக, நிழல் DOM ஐப் பயன்படுத்தி பயணிக்க JavaScript ஐப் பயன்படுத்துகிறோம் நிழல் ரூட் சொத்து. ஸ்கிரிப்ட் ஷோபீ பாப்அப்பின் க்ளோஸ் பட்டனை முதலில் அதன் நிழல் ஹோஸ்ட் உறுப்பை அணுகி அதன் உள் அமைப்பை வினவுவதன் மூலம் குறிவைக்கிறது. பயன்படுத்துவதன் மூலம் driver.execute_script(), இந்த தனிமைப்படுத்தப்பட்ட DOM க்குள் உள்ள உறுப்புகளை ஸ்கிரிப்ட் கையாளவும் மூடவும் முடியும். ஒத்திசைவின்றி ஏற்றப்படும் டைனமிக் பக்க உறுப்புகளைக் கையாள வெளிப்படையான காத்திருப்புகளுடன் இணைந்து இந்த தீர்வு நன்றாக வேலை செய்கிறது.
இரண்டாவது ஸ்கிரிப்ட் அறிமுகப்படுத்துகிறது WebDriverWait, டைனமிக் பக்க உறுப்புகளின் நேரத்தை நிர்வகிப்பதற்கான ஒரு இன்றியமையாத கருவி. Shopee இன் பாப்அப்கள் ஒத்திசைவற்ற முறையில் ஏற்றப்படுவதால், இந்த உறுப்புகளுடன் நேரடியாக தொடர்புகொள்வது பிழைகளை ஏற்படுத்தும். இதை தவிர்க்க, WebDriverWait() நாம் தொடர்பு கொள்ள விரும்பும் கூறுகள் முழுமையாக ஏற்றப்பட்டு தயாராக இருப்பதை உறுதி செய்கிறது. இந்த ஸ்கிரிப்ட் முக்கிய DOM உறுப்பு மற்றும் நிழல் DOM உறுப்புகள் இரண்டின் முன்னிலையிலும் காத்திருக்கிறது. முறை EC.presence_of_element_located() செலினியம் தனிமங்கள் தெரியும் மற்றும் இருக்கும் பிறகு மட்டுமே அவைகளுடன் தொடர்புகொள்வதை உறுதி செய்கிறது, இது பூஜ்ய குறிப்பு பிழைகளைத் தவிர்ப்பதற்கு முக்கியமானது.
இரண்டு ஸ்கிரிப்ட்களிலும், பிழை சூழ்நிலைகளை a உடன் கையாளுகிறோம் முயற்சி-தவிர கூறுகள் கண்டறியப்படாதது போன்ற எதிர்பாராத பிழைகள் காரணமாக நிரல் செயலிழக்காமல் இருப்பதை உறுதிசெய்ய தடுக்கவும். அவற்றின் கட்டமைப்பை அடிக்கடி புதுப்பிக்கும் அல்லது பாப்அப் நடத்தையை மாற்றும் வலைத்தளங்களை ஸ்கிராப் செய்யும் போது பிழை கையாளுதல் மிகவும் முக்கியமானது. கூடுதலாக, இந்த ஸ்கிரிப்டுகள் உலாவி அமர்வை நிறுத்துவதன் மூலம் சிறந்த நடைமுறைகளைப் பின்பற்றுகின்றன Driver.quit() நினைவக கசிவுகள் அல்லது செயல்திறன் சிக்கல்களைத் தவிர்க்க செயல்படுத்தப்பட்ட பிறகு.
ஷேடோ DOM ஐக் கையாளுதல் மற்றும் பைத்தானில் செலினியம் மூலம் பாப்அப்களை மூடுதல்
Shadow DOM உறுப்புகளுடன் தொடர்பு கொள்ளவும் மற்றும் பாப்அப்களை மாறும் வகையில் கையாளவும் செலினியம் வெப்டிரைவருடன் பைத்தானைப் பயன்படுத்துதல்.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import JavascriptException
import time
# Initialize WebDriver with Chrome
options = Options()
driver = webdriver.Chrome(service=Service(), options=options)
# Open Shopee website
driver.get('https://www.shopee.co.th/')
# Click the Thai language button
th_button = driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div[1]/div/div[3]/div[1]/button')
th_button.click()
# Pause to allow popups to load
time.sleep(3)
# Try to close the shadow DOM popup
try:
close_button = driver.execute_script('return document.querySelector("shopee-banner-popup-stateful")'
'.shadowRoot.querySelector("div.shopee-popup__close-btn")')
close_button.click()
except JavascriptException as e:
print("Error: ", e)
# Close the browser
driver.quit()
நிழல் DOM தொடர்புக்கு WebDriverWait ஐப் பயன்படுத்துதல்
செலினியத்தில் வெளிப்படையான காத்திருப்புகளைப் பயன்படுத்தி, நிழல் DOM இல் உள்ள கூறுகள் தொடர்பு கொள்ளத் தயாராக உள்ளன.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# Initialize WebDriver with Chrome
options = Options()
driver = webdriver.Chrome(service=Service(), options=options)
# Open Shopee website
driver.get('https://www.shopee.co.th/')
# Click the Thai language button
th_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div[1]/div[1]/div/div[3]/div[1]/button'))
)
th_button.click()
# Wait for the shadow DOM popup to be present
try:
shadow_host = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'shopee-banner-popup-stateful'))
)
shadow_root = driver.execute_script('return arguments[0].shadowRoot', shadow_host)
close_button = shadow_root.find_element(By.CSS_SELECTOR, 'div.shopee-popup__close-btn')
close_button.click()
except Exception as e:
print("Error closing the popup: ", e)
# Close the browser
driver.quit()
செலினியம் வெப்டிரைவருடன் டைனமிக் உள்ளடக்கத்தைக் கையாளுதல்
வலை ஸ்கிராப்பிங்கிற்காக Selenium WebDriver உடன் பணிபுரியும் போது கருத்தில் கொள்ள வேண்டிய மற்றொரு முக்கிய அம்சம் எப்படி கையாள்வது என்பது மாறும் உள்ளடக்கம் பக்கம் ஏற்றப்பட்ட பிறகு தொடர்ந்து புதுப்பிக்கிறது அல்லது மாறுகிறது. Shopee போன்ற பல நவீன இணையதளங்கள், உள்ளடக்கத்தை மாறும் வகையில் ஏற்றவும் புதுப்பிக்கவும் JavaScript ஐப் பயன்படுத்துகின்றன. அதாவது, பக்கம் ஏற்றப்பட்ட பிறகு, பக்கத்தில் உள்ள உறுப்புகள் உடனடியாக கிடைக்காமல் போகலாம். இதுபோன்ற சந்தர்ப்பங்களில், பக்க ஏற்றுதல் நிகழ்வுக்காக காத்திருக்கும் செலினியத்தின் இயல்புநிலை நடத்தை போதுமானதாக இருக்காது. போன்ற வெளிப்படையான காத்திருப்புகளைப் பயன்படுத்துதல் WebDriverWait குறிப்பிட்ட கூறுகள் தோன்றும் அல்லது கிளிக் செய்யக்கூடியதாக இருக்கும் வரை காத்திருப்பதன் மூலம் இந்த சிக்கலை தீர்க்க முடியும்.
பாப்அப்கள், பேனர்கள் அல்லது சிக்கலான UI கூறுகளைக் கொண்ட ஸ்கிராப்பிங் தளங்களுக்கு நிழல் DOMகள், அவர்களுடன் எவ்வாறு தொடர்புகொள்வது என்பதை அறிந்து கொள்வது அவசியம். XPath அல்லது CSS தேர்வாளர்கள் போன்ற பாரம்பரிய முறைகளால் அணுக முடியாத தனிமைப்படுத்தப்பட்ட DOM கட்டமைப்பிற்குள் உள்ள கூறுகளை இந்தக் கூறுகள் மறைக்கின்றன. பயன்படுத்தி execute_script() ஜாவாஸ்கிரிப்டை நேரடியாக உலாவியில் இயக்க அனுமதித்து, நிழல் DOMக்கான அணுகலை உங்களுக்கு வழங்குவதன் மூலம், பக்கத்தின் மறைக்கப்பட்ட பகுதிகளில் உள்ள மூடு பொத்தான்கள் அல்லது படிவப் புலங்கள் போன்ற உறுப்புகளுடன் தொடர்புகளை அனுமதிப்பதன் மூலம் கட்டளை இந்த இடைவெளியைக் குறைக்க உதவுகிறது.
கூடுதலாக, இதுபோன்ற சந்தர்ப்பங்களில் பிழை கையாளுதல் முக்கியமானது. வலைத்தளங்கள் அடிக்கடி தங்கள் கட்டமைப்பை மாற்றி, உடைந்த ஸ்கிராப்பர்களுக்கு வழிவகுக்கும். சரியான பயன்பாடு முயற்சி-தவிர பைத்தானில் உள்ள தொகுதிகள் போன்ற பிழைகளைப் பிடிக்க உங்களை அனுமதிக்கிறது ஜாவாஸ்கிரிப்ட் விதிவிலக்கு ஸ்கிராப்பர் எதிர்பாராத விதமாக செயலிழக்காமல் இருப்பதை உறுதிசெய்து, அவற்றை அழகாக கையாளவும். பிழை விவரங்களைப் பதிவுசெய்வதற்குப் பதிவு செய்வதன் மூல காரணத்தைக் கண்டறிந்து எதிர்கால ஸ்கிராப்புகளில் அதைத் தீர்க்க உதவும்.
செலினியத்தில் நிழல் DOMகள் மற்றும் பாப்அப்களைக் கையாள்வது பற்றி அடிக்கடி கேட்கப்படும் கேள்விகள்
- நிழல் DOM என்றால் என்ன, அதை அணுகுவது ஏன் கடினமாக உள்ளது?
- தி shadow DOM தனிமைப்படுத்தப்பட்ட DOM ட்ரீ ஆகும், இது இணைய உருவாக்குநர்கள் கூறுகளை இணைக்கவும், முக்கிய ஆவணத்தில் உள்ள பாணிகள் அல்லது ஸ்கிரிப்ட்களால் பாதிக்கப்படுவதைத் தடுக்கவும் பயன்படுத்துகின்றனர். பாரம்பரிய செலினியம் முறைகள் நிழல் DOM உறுப்புகளுடன் நேரடி தொடர்புகளை ஆதரிக்காததால் அணுகுவது கடினம்.
- எப்படி செய்கிறது execute_script() நிழல் DOM உடன் தொடர்பு கொள்ள உதவவா?
- execute_script() உலாவி அமர்வில் நேரடியாக JavaScript ஐ இயக்க அனுமதிக்கிறது, நிழல் DOM உறுப்புகளுக்கான அணுகலை செயல்படுத்துகிறது, இல்லையெனில் வழக்கமான செலினியம் கட்டளைகளைப் பயன்படுத்தி அணுக முடியாது.
- ஏன் உள்ளது WebDriverWait டைனமிக் உள்ளடக்கத்தை ஸ்கிராப்பிங் செய்வதற்கு முக்கியமா?
- WebDriverWait ஸ்கிரிப்ட் அதனுடன் தொடர்புகொள்வதற்கு முன், ஒரு உறுப்பு கிளிக் செய்யக்கூடியது அல்லது தற்போது இருப்பது போன்ற குறிப்பிட்ட நிபந்தனைகளுக்காக காத்திருக்கிறது. ஒத்திசைவின்றி ஏற்றப்படும் டைனமிக் உள்ளடக்கத்தைக் கையாளுவதற்கு இது முக்கியமானது.
- நான் சந்திக்கும் போது நான் என்ன செய்ய வேண்டும் JavascriptException?
- JavascriptException ஜாவாஸ்கிரிப்ட் குறியீட்டை இயக்குவதில் சிக்கல் இருக்கும்போது ஏற்படும். பயன்படுத்தி பிழை கையாளுதலை செயல்படுத்துதல் try-except தொகுதிகள் முழு ஸ்கிரிப்டையும் செயலிழக்கச் செய்யாமல் இந்தப் பிழைகளைப் பிடிக்கவும் நிர்வகிக்கவும் உதவும்.
- நிழல் DOM ஐப் பயன்படுத்தும் டைனமிக் பாப்அப்பை எப்படி மூடுவது?
- நிழல் DOM இல் இணைக்கப்பட்ட டைனமிக் பாப்அப்களை மூட, நீங்கள் முதலில் நிழல் ரூட்டைப் பயன்படுத்தி அணுக வேண்டும் execute_script() பின்னர் நிழல் DOM இன் உள்ளே பாப்அப் மூட பொத்தானைக் கண்டறியவும்.
செலினியத்தில் நிழல் DOM ஐக் கையாள்வதற்கான இறுதி எண்ணங்கள்
வெப் ஸ்கிராப்பிங்கிற்கு செலினியத்தைப் பயன்படுத்தும் போது நிழல் DOM உறுப்புகளுடன் தொடர்புகொள்வது சவாலானது. இருப்பினும், JavaScript செயல்படுத்தல் மற்றும் வெளிப்படையான காத்திருப்புகளைப் பயன்படுத்துவதன் மூலம், நிலையான முறைகள் மூலம் அணுக கடினமாக இருக்கும் கூறுகளை நீங்கள் திறம்பட நிர்வகிக்கலாம்.
பிழைகளைச் சரியாகக் கையாள்வதன் மூலமும், காத்திருப்புகளைச் சேர்ப்பதன் மூலமும், உங்கள் ஸ்கிராப்பிங் ஸ்கிரிப்ட்கள் வலுவானதாகவும் நம்பகமானதாகவும் இருப்பதை உறுதிசெய்யலாம். இந்த நுட்பங்கள், டைனமிக் உள்ளடக்கம் மற்றும் நிழல் DOMகளில் உட்பொதிக்கப்பட்ட பாப்அப்களுடன் பணிபுரியும் போது பொதுவான சிக்கல்களைத் தவிர்க்க உதவும், இது மென்மையான ஸ்கிராப்பிங் அனுபவத்தை உறுதி செய்யும்.
செலினியத்தில் நிழல் DOM ஐக் கையாள்வதற்கான பயனுள்ள ஆதாரங்கள் மற்றும் குறிப்புகள்
- செலினியத்தில் உள்ள நிழல் DOM கூறுகளுடன் தொடர்புகொள்வது பற்றிய தகவல் செலினியம் வெப்டிரைவர் ஆவணம் .
- இதிலிருந்து JavascriptException பிழைகளைக் கையாள்வது பற்றிய நுண்ணறிவு ஸ்டாக் ஓவர்ஃப்ளோ .
- வலை ஸ்கிராப்பிங் டைனமிக் உள்ளடக்கத்தைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள் குறித்த வழிகாட்டுதல் உண்மையான மலைப்பாம்பு .