āϧāϰ⧠āϤā§āĻŽāĻŋ āĻāĻāĻāĻž āĻāϝāĻŧā§āĻŦāϏāĻžāĻāĻā§ āĻā§āĻā§ āĻāĻŦāĻ āϏā§āĻāĻžāύ⧠āĻ
āύā§āĻ button, input box āĻŦāĻž link āĻāĻā§āĨ¤ āϤā§āĻŽāĻŋ āĻāĻžāĻ:
⤠āĻāĻāĻāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ button āĻ āĻā§āϞāĻŋāĻ āĻāϰāϤā§
⤠āĻāĻāĻāĻž input āĻĢāĻŋāϞā§āĻĄā§ āĻā§āĻā§āϏāĻ āĻāĻžāĻāĻĒ āĻāϰāϤā§
⤠āĻŦāĻž āϏāĻŦāĻā§āϞ⧠link āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāϤā§
āĻāĻā§āϞ⧠āĻāϰāĻžāϰ āĻāύā§āϝāĻ āĻāĻŽāϰāĻž Selenium āĻāϰ find_element āĻ find_elements āĻŽā§āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋāĨ¤
â
find_element() vs find_elements()
| āĻŽā§āĻĨāĻĄ | āĻā§ āĻāϰ⧠| āϰāĻŋāĻāĻžāϰā§āύ |
|---|---|---|
find_element | āĻāĻāĻāĻŋ āĻŽāĻžāϤā§āϰ āĻāϞāĻŋāĻŽā§āύā§āĻ āĻā§āĻāĻā§ āĻāύ⧠| āĻāĻāĻāĻŋ WebElement āĻ āĻŦāĻā§āĻā§āĻ |
find_elements | āĻāĻāĻžāϧāĻŋāĻ āĻāϞāĻŋāĻŽā§āύā§āĻ āĻā§āĻāĻā§ āĻāύ⧠| WebElement-āĻāϰ āϞāĻŋāϏā§āĻ |
đ ī¸ āĻāĻĻāĻžāĻšāϰāĻŖ HTML:
<html>
<body>
<h1 class="someclass" id="greatID">Super title</h1>
<a href="#">Link 1</a>
<a href="#">Link 2</a>
</body>
</html>
đ¯ find_element āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖ
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# h1 āĻā§āϝāĻžāĻ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāĻž
h1 = driver.find_element(By.TAG_NAME, 'h1')
# class āĻĻāĻŋāϝāĻŧā§ āĻā§āĻāĻāĻž
h1 = driver.find_element(By.CLASS_NAME, 'someclass')
# id āĻĻāĻŋāϝāĻŧā§ āĻā§āĻāĻāĻž
h1 = driver.find_element(By.ID, 'greatID')
# xpath āĻĻāĻŋāϝāĻŧā§ āĻā§āĻāĻāĻž
h1 = driver.find_element(By.XPATH, '//h1')
đ find_elements āĻāĻĻāĻžāĻšāϰāĻŖ
# āϏāĻŦ <a> āĻā§āϝāĻžāĻ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāĻž
all_links = driver.find_elements(By.TAG_NAME, 'a')
# āϞā§āĻĒ āĻāϰ⧠āϏāĻŦ āϞāĻŋāĻāĻā§āϰ āĻā§āĻā§āϏāĻ āĻĒā§āϰāĻŋāύā§āĻ
for link in all_links:
print(link.text)
đ WebElement āĻā§?
WebElement āĻšāĻā§āĻā§ āĻāĻāĻāĻŋ āĻ
āĻŦāĻā§āĻā§āĻ āϝā§āĻāĻž āĻā§āύ⧠HTML āĻāϞāĻŋāĻŽā§āύā§āĻāĻā§ āϰāĻŋāĻĒā§āϰā§āĻā§āύā§āĻ āĻāϰā§āĨ¤ āϤā§āĻŽāĻŋ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§:
.textâ āĻāϞāĻŋāĻŽā§āύā§āĻā§āϰ āĻā§āĻā§āϏāĻ āĻŦā§āϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§.click()â āĻā§āϞāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§.get_attribute('class')â attribute āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰā§.send_keys('hello')â āĻāύāĻĒā§āĻā§ āĻāĻžāĻāĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰā§.is_displayed()â āĻāϞāĻŋāĻŽā§āύā§āĻ āĻāĻāĻāĻžāϰā§āϰ āĻā§āĻā§ āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§ āĻāĻŋāύāĻž āϏā§āĻāĻž āĻŦā§āĻāϤ⧠āĻĒāĻžāϰā§
đ§Ē Honeypot āĻā§?
āϧāϰ⧠āĻāĻāĻāĻž āϏāĻžāĻāĻā§ āĻāĻŽāύ input āĻāĻā§:
<input type="hidden" name="custId" value="">
āĻāĻāĻž āĻāĻāĻāĻžāϰ āĻĻā§āĻāϤā§āĻ āĻĒāĻžāϝāĻŧ āύāĻž, āĻāĻžāϰāĻŖ āĻāĻāĻž hidden. āϝāĻĻāĻŋ āĻā§āύ⧠āĻŦāĻ āĻāĻ āĻāύāĻĒā§āĻā§āĻ āĻāĻŋāĻā§ āĻāĻžāĻāĻĒ āĻāϰ⧠āĻĢā§āϞā§, āĻāϝāĻŧā§āĻŦāϏāĻžāĻāĻ āĻŦā§āĻā§ āϝāĻžāϝāĻŧ āĻāĻāĻž āĻŦāĻ! āĻāĻāĻžāĻā§āĻ āĻŦāϞ⧠Honeypot trap.
āϤāĻžāĻ āĻāĻŽāϰāĻž .is_displayed() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ āĻā§āύ āĻāύāĻĒā§āĻāĻāĻž āĻāϏāϞā§āĻ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻāĻŋāύāĻžāĨ¤
đ§Ē Full Example: Hacker News āϞāĻāĻāύ
from selenium import webdriver
from selenium.webdriver.common.by import By
USERNAME = "your_username"
PASSWORD = "your_password"
driver = webdriver.Chrome()
driver.get("https://news.ycombinator.com/login")
# āĻāĻāĻāĻžāϰāύā§āĻŽ āĻāύāĻĒā§āĻā§ āĻāĻžāĻāĻĒ āĻāϰāĻž
driver.find_element(By.XPATH, "//input").send_keys(USERNAME)
# āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ āĻāύāĻĒā§āĻā§ āĻāĻžāĻāĻĒ āĻāϰāĻž
driver.find_element(By.XPATH, "//input[@type='password']").send_keys(PASSWORD)
# login āĻŦāĻžāĻāύ⧠āĻā§āϞāĻŋāĻ
driver.find_element(By.XPATH, "//input[@value='login']").click()
đ āϞāĻāĻāύ āϏāĻžāĻāϏā§āϏāĻĢā§āϞ āĻāĻŋāύāĻž āĻŦā§āĻāĻŦā§ āĻāĻŋāĻāĻžāĻŦā§?
from selenium.common.exceptions import NoSuchElementException
try:
logout_button = driver.find_element(By.ID, "logout")
print("â
āϏāĻžāĻāϏā§āϏāĻĢā§āϞ āϞāĻāĻāύ")
except NoSuchElementException:
print("â āĻā§āϞ āĻāĻāĻāĻžāϰāύā§āĻŽ āĻŦāĻž āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ")
â āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āϰāĻŋāĻāĻŋāĻ:
find_element: āĻĒā§āϰāĻĨāĻŽ āϝ⧠āĻāϞāĻŋāĻŽā§āύā§āĻ āĻŽā§āϞ⧠āϏā§āĻāĻžāĻ āĻĻā§āϝāĻŧfind_elements: āϏāĻŦ āĻŽāĻŋāϞ⧠āĻāĻŽāύ āĻāϞāĻŋāĻŽā§āύā§āĻā§āϰ āϞāĻŋāϏā§āĻ āĻĻā§āϝāĻŧ- āĻāϞāĻŋāĻŽā§āύā§āĻā§āϰ āĻāĻĒāϰ
.click(),.text,.get_attribute()āĻāϰ āĻŽāϤ⧠āĻ ā§āϝāĻžāĻāĻļāύ āύā§āϝāĻŧāĻž āϝāĻžāϝāĻŧ - āϏāĻžāĻāĻā§ āĻŦāĻ āϧāϰāĻžāϰ āĻāύā§āϝ honeypot āĻā§āϰā§āϝāĻžāĻĒ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§,
is_displayed()āĻĻāĻŋāϝāĻŧā§ āĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāϞāĻž āϝāĻžāϝāĻŧ