Selenium 介紹
Selenium 是一個(gè)自動(dòng)化測(cè)試工具,支持多種瀏覽器,包括 Chrome、Firefox、Edge 等,具有強(qiáng)大的瀏覽器自動(dòng)化能力,可以用于Web應(yīng)用程序的自動(dòng)化測(cè)試、數(shù)據(jù)挖掘等領(lǐng)域。Selenium的主要特點(diǎn)有:
支持多種瀏覽器
Selenium支持多種瀏覽器,包括Chrome、Firefox、Edge、Safari等,可以滿足不同用戶的需求。
多種編程語言支持
Selenium支持多種編程語言,如Python、Java、Ruby等,用戶可以選擇自己熟悉的編程語言進(jìn)行開發(fā)。
自動(dòng)化表單填寫、模擬點(diǎn)擊、頁面滾動(dòng)等操作
使用Selenium,用戶可以自動(dòng)化進(jìn)行表單填寫、模擬點(diǎn)擊、頁面滾動(dòng)等操作,可以大大提高工作效率。
處理JavaScript、Ajax、動(dòng)態(tài)頁面等特殊情況
Selenium可以處理JavaScript、Ajax、動(dòng)態(tài)頁面等特殊情況,可以更好地模擬用戶行為。
模擬用戶行為,處理彈窗、Alert等特殊情況
Selenium可以模擬用戶行為,如鼠標(biāo)移動(dòng)、鍵盤輸入等,并可以處理彈窗、Alert等特殊情況,可以更加貼近真實(shí)用戶的使用情況。
使用 Selenium
安裝
如果你使用的是 Python,可以通過 pip 安裝 Selenium:
pip install selenium
同時(shí)還需要安裝瀏覽器驅(qū)動(dòng),比如 Chrome 驅(qū)動(dòng),可以從官方網(wǎng)站下載。下載后解壓縮,把 chromedriver.exe 文件放到 Python 的安裝目錄下即可,例如 C:\Python39。
基本操作
通過 Selenium 可以模擬用戶在瀏覽器中的行為,例如打開指定的網(wǎng)頁、填寫表單、點(diǎn)擊按鈕等。下面的代碼演示了如何使用 Selenium 打開百度首頁,并在搜索框中輸入“Python”,然后點(diǎn)擊“百度一下”按鈕,最后截屏保存結(jié)果。
from selenium import webdriver
# 創(chuàng)建 Chrome 瀏覽器對(duì)象
browser = webdriver.Chrome()
# 加載頁面
browser.get('<https://www.baidu.com>')
# 找到搜索框并輸入關(guān)鍵字
kw_input = browser.find_element_by_id('kw')
kw_input.send_keys('Python')
# 找到“百度一下”按鈕并點(diǎn)擊
su_button = browser.find_element_by_id('su')
su_button.click()
# 截屏并保存結(jié)果
browser.get_screenshot_as_file('baidu_result.png')
# 關(guān)閉瀏覽器
browser.quit()
等待頁面元素
在使用 Selenium 時(shí),我們需要注意網(wǎng)頁中的元素可能是動(dòng)態(tài)生成的,在我們使用find_element
或find_elements
方法獲取的時(shí)候,可能還沒有完成渲染,這時(shí)會(huì)引發(fā)NoSuchElementException
錯(cuò)誤。為了解決這個(gè)問題,我們可以使用隱式等待的方式,通過設(shè)置等待時(shí)間讓瀏覽器完成對(duì)頁面元素的渲染。除此之外,我們還可以使用顯示等待,通過創(chuàng)建WebDriverWait
對(duì)象,并設(shè)置等待時(shí)間和條件,當(dāng)條件沒有滿足時(shí),我們可以先等待再嘗試進(jìn)行后續(xù)的操作,具體的代碼如下所示。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
# 創(chuàng)建 Chrome 瀏覽器對(duì)象
browser = webdriver.Chrome()
# 加載頁面
browser.get('<https://www.baidu.com>')
# 設(shè)置隱式等待時(shí)間為10秒
browser.implicitly_wait(10)
# 找到搜索框并輸入
元素定位
在使用Selenium時(shí),元素定位是非常重要的操作。通過元素定位,可以找到需要操作的元素,并進(jìn)行后續(xù)的操作。Selenium支持多種元素定位方式,如下所示:
ID
elem = driver.find_element_by_id("id")
Name
elem = driver.find_element_by_name("name")
Class Name
elem = driver.find_element_by_class_name("class")
Tag Name
elem = driver.find_element_by_tag_name("tag")
Link Text
elem = driver.find_element_by_link_text("text")
Partial Link Text
elem = driver.find_element_by_partial_link_text("text")
CSS Selector
elem = driver.find_element_by_css_selector("selector")
XPath
elem = driver.find_element_by_xpath("xpath")
API參考
Selenium提供了豐富的API,使得用戶可以靈活地進(jìn)行自動(dòng)化測(cè)試和數(shù)據(jù)挖掘等操作。下面是一些常用的API:
WebDriver API
WebDriver API是Selenium的核心API,提供了瀏覽器控制相關(guān)的操作。常用方法如下所示:
get(url)
加載指定的URL。
browser.get('<http://www.baidu.com>')
back()
返回上一頁。
browser.back()
forward()
前進(jìn)到下一頁。
browser.forward()
refresh()
刷新當(dāng)前頁面。
browser.refresh()
close()
關(guān)閉當(dāng)前窗口。
browser.close()
quit()
退出瀏覽器。
browser.quit()
WebElement API
WebElement API提供了對(duì)頁面元素的操作。常用方法如下所示:
click()
點(diǎn)擊元素。
elem = browser.find_element_by_id('button')
elem.click()
send_keys()
向元素發(fā)送文本。
elem = browser.find_element_by_id('input')
elem.send_keys('Hello, World!')
clear()
清空元素文本。
elem = browser.find_element_by_id('input')
elem.clear()
get_attribute(name)
獲取元素的屬性值。
elem = browser.find_element_by_id('input')
attr_value = elem.get_attribute('name')
is_displayed()
判斷元素是否對(duì)于用戶可見。
elem = browser.find_element_by_id('input')
is_visible = elem.is_displayed()
is_enabled()
判斷元素是否處于可用狀態(tài)。
elem = browser.find_element_by_id('button')
is_enabled = elem.is_enabled()
is_selected()
判斷元素(單選框和復(fù)選框)是否被選中。
elem = browser.find_element_by_id('checkbox')
is_selected = elem.is_selected()
value_of_css_property(property_name)
獲取指定的CSS屬性值。
elem = browser.find_element_by_id('button')
color = elem.value_of_css_property('color')
find_element(by=By.ID, value=None)
獲取單個(gè)子元素。
elem = browser.find_element(By.CSS_SELECTOR, '.item')
find_elements(by=By.ID, value=None)
獲取一系列子元素。
elems = browser.find_elements(By.CSS_SELECTOR, '.items')
screenshot(filename)
為元素生成快照。
elem = browser.find_element_by_id('input')
elem.screenshot('input.png')
簡(jiǎn)單案例
下面的例子演示了如何使用 Selenium 從“360圖片”網(wǎng)站搜索和下載圖片。
import os
import time
from concurrent.futures import ThreadPoolExecutor
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
DOWNLOAD_PATH = 'images/'
def download_picture(picture_url: str):
"""
下載保存圖片
:param picture_url: 圖片的URL
"""
filename = picture_url[picture_url.rfind('/') + 1:]
resp = requests.get(picture_url)
with open(os.path.join(DOWNLOAD_PATH, filename), 'wb') as file:
file.write(resp.content)
if not os.path.exists(DOWNLOAD_PATH):
os.makedirs(DOWNLOAD_PATH)
browser = webdriver.Chrome()
browser.get('<https://image.so.com/z?ch=beauty>')
browser.implicitly_wait(10)
kw_input = browser.find_element(By.CSS_SELECTOR, 'input[name=q]')
kw_input.send_keys('蒼老師')
kw_input.send_keys(Keys.ENTER)
for _ in range(10):
browser.execute_script(
'document.documentElement.scrollTop = document.documentElement.scrollHeight'
)
time.sleep(1)
imgs = browser.find_elements(By.CSS_SELECTOR, 'div.waterfall img')
with ThreadPoolExecutor(max_workers=32) as pool:
for img in imgs:
pic_url = img.get_attribute('src')
pool.submit(download_picture, pic_url)
運(yùn)行上面的代碼,檢查指定的目錄下是否下載了根據(jù)關(guān)鍵詞搜索到的圖片。文章來源:http://www.zghlxwxcb.cn/news/detail-424629.html
綜上所述,Selenium是一款強(qiáng)大的自動(dòng)化測(cè)試工具,可以用于Web應(yīng)用程序的自動(dòng)化測(cè)試、數(shù)據(jù)挖掘等領(lǐng)域。通過掌握Selenium的使用方法和API參考,你可以更加高效地進(jìn)行自動(dòng)化測(cè)試和數(shù)據(jù)挖掘等操作,提高工作效率。文章來源地址http://www.zghlxwxcb.cn/news/detail-424629.html
到了這里,關(guān)于使用Selenium抓取網(wǎng)頁動(dòng)態(tài)內(nèi)容的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!