Python與Selenium庫
簡介
Selenium是一個自動化測試工具,利用它可以驅(qū)動瀏覽器模擬用戶在頁面上的操作,例如:點(diǎn)擊,輸入,選擇等行為,使我們可以通過編寫Python腳本來進(jìn)行web頁面的自動化測試。
安裝Selenium
Selenium包含三個部分:Selenium IDE、Selenium Grid和Selenium WebDriver,其中,Selenium WebDriver是我們所需要用到的,因?yàn)樗梢则?qū)動各種瀏覽器進(jìn)行頁面的自動化測試。
Selenium WebDriver包含多個瀏覽器驅(qū)動程序,比如:ChromeDriver、FireFoxDriver等,這些驅(qū)動程序可以根據(jù)個人需求進(jìn)行選擇,默認(rèn)情況下,Selenium WebDriver的驅(qū)動程序不包含在Java或Python庫中,因此我們需要先從如下地址下載對應(yīng)的ChromeDriver(以Chrome瀏覽器為例)。
下載地址:
https://sites.google.com/a/chromium.org/chromedriver/downloads
選擇與瀏覽器對應(yīng)的版本進(jìn)行下載,下載后將chromedriver.exe文件放到Python的路徑中,例如放入Python36\Scripts文件夾下(如果是其他瀏覽器,則下載對應(yīng)驅(qū)動進(jìn)行使用)。
安裝Selenium
pip install selenium
使用Selenium
下面我們將學(xué)習(xí)如何使用Selenium來進(jìn)行web頁面自動化測試。
打開瀏覽器
使用webdriver的類方法啟動所需瀏覽器。
打開Chrome瀏覽器:
from selenium import webdriver
driver = webdriver.Chrome()
訪問網(wǎng)站
使用get方法訪問所需的網(wǎng)站。
driver.get("http://www.baidu.com")
查找元素
根據(jù)元素的id、name、class等屬性定位元素,使用webdriver的find_element_by_*方法查找,返回一個WebElement對象。
from selenium.webdriver.common.by import By
element = driver.find_element(By.TAG_NAME, "input")
操作元素
可以對找到的元素進(jìn)行不同的操作,例如:輸入文本、點(diǎn)擊、選擇等行為。
input_element = driver.find_element(By.NAME, "wd")
input_element.send_keys("Selenium")
# 提交搜索
submit_element = driver.find_element(By.ID, "su")
submit_element.click()
等待
在訪問某些網(wǎng)站時,網(wǎng)站可能需要一些時間來加載頁面或元素,此時我們可以使用Selenium提供的等待機(jī)制,以確保所需元素的出現(xiàn)和交互行為的完成。
Selenium提供了兩種等待方式:
- 隱式等待(Implicit Wait):如果找到元素不存在,等待一定時間后拋出異常,使用方法driver.implicitly_wait(seconds);
- 顯式等待(Explit Wait):在給定的時間內(nèi)等待指定的條件出現(xiàn),可以自定義等待的條件,等待超時后拋出異常,使用方法WebDriverWait(driver, timeout, poll_frequency=500, ignored_exceptions=None).until(expected_conditions.條件)。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出現(xiàn)
try:
# 顯式等待
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "content_left")))
# 隱式等待
# driver.implicitly_wait(10)
except Exception:
print("元素未找到")
關(guān)閉瀏覽器
在自動測試過程中,需要在最后關(guān)閉瀏覽器。
driver.quit()
示例代碼
下面是一個完整的示例代碼。該代碼實(shí)現(xiàn)了打開百度首頁,輸入文本,點(diǎn)擊搜索按鈕,等待結(jié)果出現(xiàn)并打印第一條搜索結(jié)果的標(biāo)題。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 啟動瀏覽器
driver = webdriver.Chrome()
# 訪問網(wǎng)站
driver.get("http://www.baidu.com")
# 輸入搜索文本
input_element = driver.find_element(By.NAME, "wd")
input_element.send_keys("Selenium")
# 點(diǎn)擊搜索
submit_element = driver.find_element(By.ID, "su")
submit_element.click()
# 顯式等待
try:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "content_left")))
except Exception:
print("元素未找到")
# 查找元素
result_element = driver.find_element(By.CSS_SELECTOR, "#content_left div.c-container h3.t a")
# 打印第一條搜索結(jié)果的標(biāo)題
print(result_element.text)
# 關(guān)閉瀏覽器
driver.quit()
總結(jié)
通過Python與Selenium的結(jié)合,我們可以進(jìn)行網(wǎng)站自動化測試,實(shí)現(xiàn)自動化輸入、點(diǎn)擊、選擇等行為,以及對搜索結(jié)果進(jìn)行定位和獲取等操作,從而提高測試效率和可靠性,也可以應(yīng)用于爬蟲程序中。
爬蟲實(shí)戰(zhàn)
批量獲取bing圖片搜索引擎中的歐美頭像文章來源:http://www.zghlxwxcb.cn/news/detail-787871.html
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Safari()#選擇驅(qū)動
driver.get("https://www.bing.com/images")
# 找到搜索框并輸入關(guān)鍵字
search_box = driver.find_element(By.NAME,"q")
search_box.send_keys("歐美頭像")
search_box.send_keys(Keys.RETURN)
# 等待頁面加載完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "mmComponent_images_1")))
# 模擬下拉到底部的操作,讓更多的圖片顯示出來
SCROLL_PAUSE_TIME = 1
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# 找到所有圖片的元素
images = driver.find_elements(By.XPATH,"http://img[contains(@class,'mimg')]")
urls = []
for image in images:
# 僅保留縱橫比為1:1的圖片
width = int(image.get_attribute("width"))
height = int(image.get_attribute("height"))
if width == height:
url = image.get_attribute("src")
urls.append(url)
# 輸出圖片url
# 關(guān)閉瀏覽器
driver.quit()
import urllib.request
# 保存圖片到本地
for i, url in enumerate(urls):
urllib.request.urlretrieve(url, f"image_{i}.jpg")
文章來源地址http://www.zghlxwxcb.cn/news/detail-787871.html
完
到了這里,關(guān)于Python與Selenium庫(含爬蟲實(shí)戰(zhàn)例子)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!