ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ಸಾಮಾನ್ಯ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ದೋಷಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಸರಿಪಡಿಸುವುದು
ಇದರೊಂದಿಗೆ ವೆಬ್ ಸ್ಕ್ರ್ಯಾಪ್ ಮಾಡುವಾಗ ಸೆಲೆನಿಯಮ್ ವೆಬ್ ಡ್ರೈವರ್, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್-ಸಂಬಂಧಿತ ದೋಷಗಳನ್ನು ಎದುರಿಸುವುದು ಅಸಾಮಾನ್ಯವೇನಲ್ಲ, ವಿಶೇಷವಾಗಿ ಡೈನಾಮಿಕ್ ವೆಬ್ ಅಂಶಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ನೆರಳು DOM ಗಳು. ಡೆವಲಪರ್ಗಳು ಎದುರಿಸುತ್ತಿರುವ ಒಂದು ಆಗಾಗ್ಗೆ ದೋಷವಾಗಿದೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಎಕ್ಸೆಪ್ಶನ್: ಶೂನ್ಯ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಓದಲಾಗುವುದಿಲ್ಲ ('ಶ್ಯಾಡೋ ರೂಟ್' ಓದುವಿಕೆ), ಇದು ಸಂಕೀರ್ಣ ಪುಟ ಅಂಶಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವಾಗ ಆಗಾಗ್ಗೆ ಸಂಭವಿಸುತ್ತದೆ.
ಸೆಲೆನಿಯಮ್ a ಒಳಗಿನ ಅಂಶಗಳೊಂದಿಗೆ ಪ್ರವೇಶಿಸಲು ಅಥವಾ ಸಂವಹನ ಮಾಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದಾಗ ಈ ದೋಷವು ಸಾಮಾನ್ಯವಾಗಿ ಉದ್ಭವಿಸುತ್ತದೆ ನೆರಳು DOM, ಉತ್ತಮ ಮಾಡ್ಯುಲಾರಿಟಿಗಾಗಿ ಅನೇಕ ಆಧುನಿಕ ವೆಬ್ಸೈಟ್ಗಳು ಬಳಸುವ ವಿಶಿಷ್ಟ ರೀತಿಯ ಸುತ್ತುವರಿದ DOM ರಚನೆ. ಪೈಥಾನ್ನಲ್ಲಿ, ಬ್ರೌಸರ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಲು ಸೆಲೆನಿಯಮ್ ಅನ್ನು ಬಳಸುವುದು ಅಂತಹ ಅಂಶಗಳೊಂದಿಗೆ ಟ್ರಿಕಿ ಆಗಿರಬಹುದು.
Shopee ನಂತಹ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳಿಂದ ವೆಬ್ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ ಸಂದರ್ಭದಲ್ಲಿ, ಪಾಪ್ಅಪ್ಗಳು ಅಥವಾ ಬ್ಯಾನರ್ಗಳು ಹೆಚ್ಚಾಗಿ ನೆರಳು DOM ಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತವೆ, ಇದು ಪ್ರೋಗ್ರಾಮಿಕ್ ಆಗಿ ಮುಚ್ಚಲು ಸವಾಲಾಗಿರಬಹುದು. ಈ ಸಮಸ್ಯೆಯು ಸ್ವಯಂಚಾಲಿತ ಕಾರ್ಯಗಳ ಸುಗಮ ಹರಿವಿಗೆ ಅಡ್ಡಿಯಾಗಬಹುದು ಮತ್ತು ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು ಅಡ್ಡಿಪಡಿಸಬಹುದು.
ಈ ಮಾರ್ಗದರ್ಶಿ ನಿಮ್ಮನ್ನು ಪರಿಹರಿಸಲು ಸ್ಪಷ್ಟ ಪರಿಹಾರದ ಮೂಲಕ ನಿಮ್ಮನ್ನು ಕರೆದೊಯ್ಯುತ್ತದೆ 'ಶೂನ್ಯ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಓದಲಾಗುವುದಿಲ್ಲ' ದೋಷ ಮತ್ತು Shopee ಬಳಸಿಕೊಂಡು ನೆರಳು DOM ನಲ್ಲಿ ಎಂಬೆಡ್ ಮಾಡಲಾದ ಪಾಪ್ಅಪ್ ಅನ್ನು ಮುಚ್ಚಲು ಪ್ರಾಯೋಗಿಕ ವಿಧಾನವನ್ನು ಒದಗಿಸಿ ಪೈಥಾನ್ ಸೆಲೆನಿಯಮ್.
ಆಜ್ಞೆ | ಬಳಕೆಯ ಉದಾಹರಣೆ |
---|---|
shadowRoot | ನೆರಳು DOM ಒಳಗೆ ಅಂಶಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ನೆರಳು DOM ಮುಖ್ಯ DOM ಮರದಿಂದ ಕೆಲವು ಅಂಶಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ, ಅವುಗಳನ್ನು ಪ್ರವೇಶಿಸಲು shadowRoot ಆಸ್ತಿಯ ಅಗತ್ಯವಿರುತ್ತದೆ. ಈ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ, ಪಾಪ್ಅಪ್ನೊಳಗಿನ ಕ್ಲೋಸ್ ಬಟನ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. |
execute_script() | ಈ ಸೆಲೆನಿಯಮ್ ವಿಧಾನವು ಬ್ರೌಸರ್ ಸೆಷನ್ನಲ್ಲಿ ಕಚ್ಚಾ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಸಾಂಪ್ರದಾಯಿಕ ಸೆಲೆನಿಯಮ್ ವಿಧಾನಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸದ ಕಾರಣ ನೆರಳು DOM ಅಂಶಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವಾಗ ಇದು ಅತ್ಯಗತ್ಯ. |
WebDriverWait() | ಈ ಆಜ್ಞೆಯು ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ಸ್ಪಷ್ಟವಾದ ಕಾಯುವಿಕೆಯನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ಒಂದು ಅಂಶವು ಕ್ಲಿಕ್ ಮಾಡಬಹುದಾದಂತಹ ನಿರ್ದಿಷ್ಟ ಸ್ಥಿತಿಯನ್ನು ಪೂರೈಸುವವರೆಗೆ ಸ್ಕ್ರಿಪ್ಟ್ ಕಾಯುತ್ತಿದೆ ಎಂದು ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ. Shopee ನ ಪಾಪ್ಅಪ್ಗಳೊಂದಿಗೆ ನೋಡಿದಂತೆ ಡೈನಾಮಿಕ್ ಕಂಟೆಂಟ್ ಲೋಡಿಂಗ್ಗೆ ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. |
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 ಗಳಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ, ಇದು ಸಾಂಪ್ರದಾಯಿಕ ಸೆಲೆನಿಯಮ್ ವಿಧಾನಗಳೊಂದಿಗೆ ಪ್ರವೇಶಿಸಿದರೆ ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಮೊದಲ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು JavaScript ಎಕ್ಸಿಕ್ಯೂಶನ್ ಮೂಲಕ ಪಾಪ್ಅಪ್ ಅನ್ನು ಮುಚ್ಚಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಎಕ್ಸಿಕ್ಯೂಟ್_ಸ್ಕ್ರಿಪ್ಟ್(), ಸೆಲೆನಿಯಮ್ ಅನ್ನು ಬ್ರೌಸರ್ ಸನ್ನಿವೇಶದಲ್ಲಿ ಕಚ್ಚಾ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಚಲಾಯಿಸಲು ಅನುಮತಿಸುವ ಪ್ರಬಲ ಸಾಧನವಾಗಿದೆ.
ಪ್ರಮುಖ ಸವಾಲು ಎಂದರೆ ನೆರಳು DOM ಒಳಗಿನ ಅಂಶಗಳು ಸಾಮಾನ್ಯ ಸೆಲೆನಿಯಮ್ ಆಜ್ಞೆಗಳೊಂದಿಗೆ ಪ್ರವೇಶಿಸಲಾಗುವುದಿಲ್ಲ find_element_by_xpath(). ಬದಲಿಗೆ, ನಾವು ನೆರಳು DOM ಅನ್ನು ಬಳಸಿಕೊಂಡು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ ನೆರಳು ಬೇರು ಆಸ್ತಿ. ಸ್ಕ್ರಿಪ್ಟ್ ಮೊದಲು ಅದರ ನೆರಳು ಹೋಸ್ಟ್ ಅಂಶವನ್ನು ಪ್ರವೇಶಿಸುವ ಮೂಲಕ Shopee ಪಾಪ್ಅಪ್ನ ಕ್ಲೋಸ್ ಬಟನ್ ಅನ್ನು ಗುರಿಪಡಿಸುತ್ತದೆ ಮತ್ತು ನಂತರ ಅದರ ಆಂತರಿಕ ರಚನೆಯನ್ನು ಪ್ರಶ್ನಿಸುತ್ತದೆ. ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ driver.execute_script(), ಸ್ಕ್ರಿಪ್ಟ್ ಈ ಪ್ರತ್ಯೇಕವಾದ DOM ಒಳಗೆ ಅಂಶಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ಮತ್ತು ಮುಚ್ಚಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಅಸಮಕಾಲಿಕವಾಗಿ ಲೋಡ್ ಮಾಡುವ ಡೈನಾಮಿಕ್ ಪುಟ ಅಂಶಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಸ್ಪಷ್ಟವಾದ ಕಾಯುವಿಕೆಯೊಂದಿಗೆ ಸಂಯೋಜಿಸಿದಾಗ ಈ ಪರಿಹಾರವು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಎರಡನೇ ಸ್ಕ್ರಿಪ್ಟ್ ಪರಿಚಯಿಸುತ್ತದೆ WebDriverWait, ಡೈನಾಮಿಕ್ ಪುಟ ಅಂಶಗಳ ಸಮಯವನ್ನು ನಿರ್ವಹಿಸಲು ಅತ್ಯಗತ್ಯ ಸಾಧನ. Shopee ನ ಪಾಪ್ಅಪ್ಗಳು ಅಸಮಕಾಲಿಕವಾಗಿ ಲೋಡ್ ಆಗುವುದರಿಂದ, ಈ ಅಂಶಗಳೊಂದಿಗೆ ನೇರವಾಗಿ ಸಂವಹನ ಮಾಡುವುದು ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಇದನ್ನು ತಪ್ಪಿಸಲು, WebDriverWait() ನಾವು ಸಂವಹನ ಮಾಡಲು ಬಯಸುವ ಅಂಶಗಳು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿವೆ ಮತ್ತು ಸಿದ್ಧವಾಗಿವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಮುಖ್ಯ DOM ಅಂಶ ಮತ್ತು ನೆರಳು DOM ಅಂಶಗಳ ಉಪಸ್ಥಿತಿಗಾಗಿ ಕಾಯುತ್ತದೆ. ವಿಧಾನ EC.presence_of_element_located() ಸೆಲೆನಿಯಮ್ ಅಂಶಗಳು ಗೋಚರಿಸುವ ಮತ್ತು ಪ್ರಸ್ತುತವಾದ ನಂತರ ಮಾತ್ರ ಅವುಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಇದು ಶೂನ್ಯ ಉಲ್ಲೇಖ ದೋಷಗಳನ್ನು ತಪ್ಪಿಸಲು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
ಎರಡೂ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಲ್ಲಿ, ನಾವು ಎ ಯೊಂದಿಗೆ ದೋಷದ ಸಂದರ್ಭಗಳನ್ನು ನಿಭಾಯಿಸುತ್ತೇವೆ ಪ್ರಯತ್ನಿಸಿ-ಹೊರತುಪಡಿಸಿ ಅಂಶಗಳು ಕಂಡುಬಂದಿಲ್ಲದಂತಹ ಅನಿರೀಕ್ಷಿತ ದೋಷಗಳಿಂದಾಗಿ ಪ್ರೋಗ್ರಾಂ ಕ್ರ್ಯಾಶ್ ಆಗುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿರ್ಬಂಧಿಸಿ. ಆಗಾಗ್ಗೆ ತಮ್ಮ ರಚನೆಯನ್ನು ನವೀಕರಿಸುವ ಅಥವಾ ಪಾಪ್ಅಪ್ ನಡವಳಿಕೆಯನ್ನು ಬದಲಾಯಿಸುವ ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಸ್ಕ್ರ್ಯಾಪ್ ಮಾಡುವಾಗ ದೋಷ ನಿರ್ವಹಣೆಯು ವಿಶೇಷವಾಗಿ ಮುಖ್ಯವಾಗಿದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಈ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಬ್ರೌಸರ್ ಸೆಶನ್ ಅನ್ನು ಕೊನೆಗೊಳಿಸುವ ಮೂಲಕ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸುತ್ತವೆ 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()
Shadow DOM ಸಂವಹನಕ್ಕಾಗಿ WebDriverWait ಅನ್ನು ಬಳಸುವುದು
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.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()
ಸೆಲೆನಿಯಮ್ ವೆಬ್ಡ್ರೈವರ್ನೊಂದಿಗೆ ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ನಿರ್ವಹಿಸುವುದು
ವೆಬ್ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ಗಾಗಿ ಸೆಲೆನಿಯಮ್ ವೆಬ್ಡ್ರೈವರ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಪರಿಗಣಿಸಬೇಕಾದ ಮತ್ತೊಂದು ಪ್ರಮುಖ ಅಂಶವೆಂದರೆ ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು ಡೈನಾಮಿಕ್ ವಿಷಯ ಪುಟ ಲೋಡ್ ಮಾಡಿದ ನಂತರ ನಿರಂತರವಾಗಿ ನವೀಕರಿಸುತ್ತದೆ ಅಥವಾ ಬದಲಾಗುತ್ತದೆ. Shopee ನಂತಹ ಅನೇಕ ಆಧುನಿಕ ವೆಬ್ಸೈಟ್ಗಳು, ವಿಷಯವನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ನವೀಕರಿಸಲು JavaScript ಅನ್ನು ಬಳಸುತ್ತವೆ. ಇದರರ್ಥ ಪುಟವು ಲೋಡ್ ಆದ ನಂತರ ಪುಟದಲ್ಲಿನ ಅಂಶಗಳು ತಕ್ಷಣವೇ ಲಭ್ಯವಿರುವುದಿಲ್ಲ. ಅಂತಹ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಪುಟ ಲೋಡ್ ಈವೆಂಟ್ಗಾಗಿ ಕಾಯುವ ಸೆಲೆನಿಯಮ್ನ ಡೀಫಾಲ್ಟ್ ನಡವಳಿಕೆಯು ಸಾಕಾಗುವುದಿಲ್ಲ. ನಂತಹ ಸ್ಪಷ್ಟವಾದ ಕಾಯುವಿಕೆಗಳನ್ನು ಬಳಸುವುದು WebDriverWait ನಿರ್ದಿಷ್ಟ ಅಂಶಗಳು ಕಾಣಿಸಿಕೊಳ್ಳಲು ಅಥವಾ ಕ್ಲಿಕ್ ಮಾಡಬಹುದಾದವರೆಗೆ ಕಾಯುವ ಮೂಲಕ ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಬಹುದು.
ಪಾಪ್ಅಪ್ಗಳು, ಬ್ಯಾನರ್ಗಳು ಅಥವಾ ಸಂಕೀರ್ಣ UI ಘಟಕಗಳನ್ನು ಅವಲಂಬಿಸಿರುವ ಸೈಟ್ಗಳನ್ನು ಸ್ಕ್ರ್ಯಾಪ್ ಮಾಡಲು ನೆರಳು DOM ಗಳು, ಅವರೊಂದಿಗೆ ಹೇಗೆ ಸಂವಹನ ನಡೆಸಬೇಕೆಂದು ತಿಳಿಯುವುದು ಅತ್ಯಗತ್ಯ. XPath ಅಥವಾ CSS ಸೆಲೆಕ್ಟರ್ಗಳಂತಹ ಸಾಂಪ್ರದಾಯಿಕ ವಿಧಾನಗಳಿಂದ ಪ್ರವೇಶಿಸಲಾಗದ ಪ್ರತ್ಯೇಕವಾದ DOM ರಚನೆಯೊಳಗೆ ಈ ಘಟಕಗಳು ಅಂಶಗಳನ್ನು ಮರೆಮಾಡುತ್ತವೆ. ಅನ್ನು ಬಳಸುವುದು ಎಕ್ಸಿಕ್ಯೂಟ್_ಸ್ಕ್ರಿಪ್ಟ್() ನೀವು ಬ್ರೌಸರ್ನಲ್ಲಿ ನೇರವಾಗಿ JavaScript ಅನ್ನು ಚಲಾಯಿಸಲು ಅನುಮತಿಸುವ ಮೂಲಕ ಈ ಅಂತರವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಆಜ್ಞೆಯು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ನಿಮಗೆ ನೆರಳು DOM ಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ಪುಟದ ಗುಪ್ತ ಭಾಗಗಳಲ್ಲಿ ಮುಚ್ಚಿದ ಬಟನ್ಗಳು ಅಥವಾ ಫಾರ್ಮ್ ಕ್ಷೇತ್ರಗಳಂತಹ ಅಂಶಗಳೊಂದಿಗೆ ಸಂವಾದಕ್ಕೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ.
ಹೆಚ್ಚುವರಿಯಾಗಿ, ಅಂತಹ ಸಂದರ್ಭಗಳಲ್ಲಿ ದೋಷ ನಿರ್ವಹಣೆ ನಿರ್ಣಾಯಕವಾಗುತ್ತದೆ. ವೆಬ್ಸೈಟ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ತಮ್ಮ ರಚನೆಯನ್ನು ಬದಲಾಯಿಸಬಹುದು, ಇದು ಮುರಿದ ಸ್ಕ್ರಾಪರ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಸರಿಯಾದ ಬಳಕೆ ಪ್ರಯತ್ನಿಸಿ-ಹೊರತುಪಡಿಸಿ ಪೈಥಾನ್ನಲ್ಲಿರುವ ಬ್ಲಾಕ್ಗಳು ದೋಷಗಳನ್ನು ಹಿಡಿಯಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಎಕ್ಸೆಪ್ಶನ್ ಮತ್ತು ಅವುಗಳನ್ನು ಆಕರ್ಷಕವಾಗಿ ನಿರ್ವಹಿಸಿ, ಸ್ಕ್ರಾಪರ್ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕ್ರ್ಯಾಶ್ ಆಗದಂತೆ ನೋಡಿಕೊಳ್ಳಿ. ದೋಷದ ವಿವರಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಲಾಗಿಂಗ್ ಅನ್ನು ಸೇರಿಸುವುದು ಮೂಲ ಕಾರಣವನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಭವಿಷ್ಯದ ಸ್ಕ್ರ್ಯಾಪ್ಗಳಲ್ಲಿ ಅದನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ನೆರಳು DOM ಗಳು ಮತ್ತು ಪಾಪ್ಅಪ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಕುರಿತು ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು
- ನೆರಳು DOM ಎಂದರೇನು ಮತ್ತು ಅದನ್ನು ಪ್ರವೇಶಿಸಲು ಏಕೆ ಕಷ್ಟ?
- ದಿ shadow DOM ವೆಬ್ ಡೆವಲಪರ್ಗಳು ಅಂಶಗಳನ್ನು ಸುತ್ತುವರಿಯಲು ಮತ್ತು ಮುಖ್ಯ ದಾಖಲೆಯಲ್ಲಿನ ಶೈಲಿಗಳು ಅಥವಾ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಿಂದ ಪ್ರಭಾವಿತವಾಗದಂತೆ ತಡೆಯಲು ಬಳಸುವ ಒಂದು ಪ್ರತ್ಯೇಕವಾದ DOM ಟ್ರೀ ಆಗಿದೆ. ಸಾಂಪ್ರದಾಯಿಕ ಸೆಲೆನಿಯಮ್ ವಿಧಾನಗಳು ನೆರಳು DOM ಅಂಶಗಳೊಂದಿಗೆ ನೇರ ಸಂವಹನವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲವಾದ್ದರಿಂದ ಪ್ರವೇಶಿಸಲು ಕಷ್ಟವಾಗುತ್ತದೆ.
- ಹೇಗೆ ಮಾಡುತ್ತದೆ execute_script() ನೆರಳು DOM ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಸಹಾಯ ಮಾಡುವುದೇ?
- execute_script() ಬ್ರೌಸರ್ ಸೆಷನ್ನಲ್ಲಿ ನೇರವಾಗಿ JavaScript ಅನ್ನು ಚಾಲನೆ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ, ನೆರಳು DOM ಅಂಶಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ಇಲ್ಲದಿದ್ದರೆ ಸಾಮಾನ್ಯ ಸೆಲೆನಿಯಮ್ ಆಜ್ಞೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ತಲುಪಲಾಗುವುದಿಲ್ಲ.
- ಏಕೆ ಆಗಿದೆ WebDriverWait ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ಸ್ಕ್ರ್ಯಾಪ್ ಮಾಡಲು ಮುಖ್ಯವೇ?
- WebDriverWait ಸ್ಕ್ರಿಪ್ಟ್ ಅದರೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ಮೊದಲು ಕ್ಲಿಕ್ ಮಾಡಬಹುದಾದ ಅಥವಾ ಪ್ರಸ್ತುತವಾಗಿರುವಂತಹ ನಿರ್ದಿಷ್ಟ ಷರತ್ತುಗಳಿಗಾಗಿ ಕಾಯುತ್ತಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಅಸಮಕಾಲಿಕವಾಗಿ ಲೋಡ್ ಆಗುವ ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ನಿರ್ವಹಿಸಲು ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
- ನಾನು ಎದುರಾದಾಗ ನಾನು ಏನು ಮಾಡಬೇಕು JavascriptException?
- JavascriptException JavaScript ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ಸಮಸ್ಯೆ ಇದ್ದಾಗ ಸಂಭವಿಸುತ್ತದೆ. ಬಳಸಿಕೊಂಡು ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತಿದೆ try-except ಸಂಪೂರ್ಣ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕ್ರ್ಯಾಶ್ ಮಾಡದೆಯೇ ಈ ದೋಷಗಳನ್ನು ಹಿಡಿಯಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು ಬ್ಲಾಕ್ಗಳು ಸಹಾಯ ಮಾಡುತ್ತವೆ.
- ನೆರಳು DOM ಗಳನ್ನು ಬಳಸುವ ಡೈನಾಮಿಕ್ ಪಾಪ್ಅಪ್ಗಳನ್ನು ನಾನು ಹೇಗೆ ಮುಚ್ಚಬಹುದು?
- ನೆರಳು DOM ನಲ್ಲಿ ಸುತ್ತುವರಿದ ಡೈನಾಮಿಕ್ ಪಾಪ್ಅಪ್ಗಳನ್ನು ಮುಚ್ಚಲು, ನೀವು ಮೊದಲು ನೆರಳು ಮೂಲವನ್ನು ಬಳಸಬೇಕಾಗುತ್ತದೆ execute_script() ತದನಂತರ ನೆರಳು DOM ಒಳಗೆ ಪಾಪ್ಅಪ್ ಕ್ಲೋಸ್ ಬಟನ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಿ.
ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ನೆರಳು DOM ಅನ್ನು ನಿರ್ವಹಿಸುವ ಅಂತಿಮ ಆಲೋಚನೆಗಳು
ವೆಬ್ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ಗಾಗಿ ಸೆಲೆನಿಯಮ್ ಅನ್ನು ಬಳಸುವಾಗ ನೆರಳು DOM ಅಂಶಗಳೊಂದಿಗೆ ಸಂವಹನ ಮಾಡುವುದು ಸವಾಲಿನ ಸಂಗತಿಯಾಗಿದೆ. ಆದಾಗ್ಯೂ, JavaScript ಎಕ್ಸಿಕ್ಯೂಶನ್ ಮತ್ತು ಸ್ಪಷ್ಟವಾದ ಕಾಯುವಿಕೆಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ, ಪ್ರಮಾಣಿತ ವಿಧಾನಗಳೊಂದಿಗೆ ಪ್ರವೇಶಿಸಲು ಕಷ್ಟಕರವಾದ ಅಂಶಗಳನ್ನು ನೀವು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಬಹುದು.
ದೋಷಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸುವ ಮೂಲಕ ಮತ್ತು ಕಾಯುವಿಕೆಯನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ದೃಢವಾದ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿವೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಈ ತಂತ್ರಗಳು ಡೈನಾಮಿಕ್ ಕಂಟೆಂಟ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಸಾಮಾನ್ಯ ಮೋಸಗಳನ್ನು ತಪ್ಪಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ ಮತ್ತು ನೆರಳು DOM ಗಳಲ್ಲಿ ಎಂಬೆಡ್ ಮಾಡಲಾದ ಪಾಪ್ಅಪ್ಗಳು ಸುಗಮವಾದ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ ಅನುಭವವನ್ನು ಖಾತ್ರಿಪಡಿಸುತ್ತದೆ.
ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ನೆರಳು DOM ಅನ್ನು ನಿರ್ವಹಿಸಲು ಉಪಯುಕ್ತ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- ಸೆಲೆನಿಯಮ್ನಲ್ಲಿ ನೆರಳು DOM ಅಂಶಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ಮಾಹಿತಿ ಸೆಲೆನಿಯಮ್ ವೆಬ್ಡ್ರೈವರ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ .
- ನಿಂದ JavascriptException ದೋಷಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಒಳನೋಟಗಳು ಸ್ಟಾಕ್ ಓವರ್ಫ್ಲೋ .
- ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ಬಳಸಿಕೊಂಡು ವೆಬ್ ಸ್ಕ್ರ್ಯಾಪಿಂಗ್ಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳ ಕುರಿತು ಮಾರ್ಗದರ್ಶನ ನಿಜವಾದ ಪೈಥಾನ್ .