selenium爬蟲學習1

积分别忘C發表於2024-08-29

簡介

Selenium是廣泛使用的模擬瀏覽器執行的庫,它是一個用於Web應用程式測試的工具。 Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣,並且支援大多數現代 Web 瀏覽器。

函式介紹


重點方法
1.find_element方法是 Selenium WebDriver 提供的一種用於查詢頁面上某個符合條件的元素的方法。
2.find_elements 方法是 Selenium WebDriver 提供的一種用於查詢頁面上所有符合條件的元素的方法。與 find_element 不同,find_elements 返回的是一個列表,其中包含所有匹配的元素。如果沒有找到任何元素,則返回一個空列表。
以下是 find_element(s) 方法的一些常見用法:
By.ID:透過元素的 ID 查詢。
By.NAME:透過元素的 name 屬性查詢。
By.CLASS_NAME:透過元素的類名查詢。
By.TAG_NAME:透過元素的標籤名查詢。
By.LINK_TEXT:透過連結文字查詢。
By.PARTIAL_LINK_TEXT:透過部分連結文字查詢。
By.CSS_SELECTOR:透過 CSS 選擇器查詢。
By.XPATH:透過 XPath 表示式查詢。
driver.find_element物件具有.click()方法,就是點選這個元素
3.driver.window_handles獲取當前所有視窗控制代碼
4.driver.switch_to.window()跳轉到某個視窗

練習程式碼

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 初始化瀏覽器驅動
driver = webdriver.Chrome()

# 開啟阿里雲漏洞庫首頁
driver.get("https://avd.aliyun.com/")
time.sleep(2)

# 定位輸入框並輸入關鍵字
search_box = driver.find_element(By.XPATH, "/html/body/header/nav/div/form/input")
search_box.send_keys("MySQL")

# 點選搜尋按鈕
search_button = driver.find_element(By.XPATH, '/html/body/header/nav/div/form/button')
search_button.click()
# 等待2秒
time.sleep(2)
res_header=driver.find_element(By.ID,'itl-header')
print(res_header.text)
tr_elements = driver.find_elements(By.XPATH,"/html/body/main/div[2]/div/div[2]/table/tbody")
for tr in tr_elements:
    # 在這裡對每個tr元素進行操作,例如提取文字內容
    print(tr.text)
link = driver.find_element(By.PARTIAL_LINK_TEXT, "AVD-2024-21177")
link.click()
all_windows = driver.window_handles
driver.switch_to.window(all_windows[-1])
searchclass=driver.find_elements(By.CSS_SELECTOR, '.border-bottom.border-gray.pb-2.mb-0')
for search in searchclass:
    print(search.text)
time.sleep(3)
driver.close()
driver.switch_to.window(all_windows[0])# 切回原來的視窗
input("Press Enter to close the browser...")
# 關閉瀏覽器

driver.quit()

執行效果

執行過程

執行後先是開啟瀏覽器進入阿里雲漏洞庫,緊接著搜尋MYSQL相關漏洞,結果如下

透過html的id屬性找到“搜尋結果 關於[mysql]的搜尋資料”這幾個字列印出來

tr_elements = driver.find_elements(By.XPATH,"/html/body/main/div[2]/div/div[2]/table/tbody")
res_header=driver.find_element(By.ID,'itl-header')
print(res_header.text)

透過xpath找到tbody裡面所有行,遍歷並列印內容

tr_elements = driver.find_elements(By.XPATH,"/html/body/main/div[2]/div/div[2]/table/tbody")
for tr in tr_elements:
    # 在這裡對每個tr元素進行操作,例如提取文字內容
    print(tr.text)

隨便定位一個漏洞介紹的連結點進去:

link = driver.find_element(By.PARTIAL_LINK_TEXT, "AVD-2024-21177")
link.click()
all_windows = driver.window_handles  # 獲取所有視窗的控制代碼
driver.switch_to.window(all_windows[-1])#有的瀏覽器並不會自動跳轉到點開的標籤頁,所以可以獲取當前所有標籤頁再利用函式跳轉

列印所有class="border-bottom border-gray pb-2 mb-0"的元素

searchclass=driver.find_elements(By.CSS_SELECTOR, '.border-bottom.border-gray.pb-2.mb-0')
for search in searchclass:
    print(search.text)

因為class的值包含空格所以不能直接By.CLASS尋找,用By.CSS_SELECTOR,每個值用點號分隔

關閉瀏覽器

相關文章