Selenium的使用詳解
先來(lái)看一下功能實(shí)現(xiàn),代碼如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
#聲明瀏覽器對(duì)象
browser = webdriver.Chrome()
try:
browser.get('https:www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('Python')
input.send_keys(Keys.ENTER)
wait = WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By.ID,'content_left')))
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)
finally:
browser.close()
可以看到打開(kāi)了百度網(wǎng)站,查詢了“Python”并且輸出了當(dāng)前的url,cookies還有網(wǎng)頁(yè)源代碼。
下面再來(lái)介紹詳細(xì)功能。
1、聲明瀏覽器對(duì)象。
browser = webdriver.Chrome() browser = webdriver.Firefox()
瀏覽器的對(duì)象初始化,并將其賦值給browser對(duì)象。
2.以淘寶為例,請(qǐng)求網(wǎng)頁(yè)。
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)
browser.close()
可以看到輸出了淘寶的源碼,隨后關(guān)閉。
3.查找節(jié)點(diǎn)
單個(gè)節(jié)點(diǎn)
提取搜索框這個(gè)節(jié)點(diǎn)
檢查搜索框如下:

查找搜索框:
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
# 通過(guò)id查找
input_first = browser.find_element_by_id('q')
# 通過(guò)css查找
input_second = browser.find_element_by_css_selector('#q')
# 通過(guò)xpath查找
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()
# 查找單個(gè)節(jié)點(diǎn)的方法 find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector
通用方法查找:
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(By.ID,'q')
print(input_first)
browser.close()
- find_element()里面需要兩個(gè)參數(shù),查找方式By和值,
- 例如:find_element(By.ID,'q') 通過(guò)查找ID的當(dāng)時(shí),查找id為q。
多個(gè)節(jié)點(diǎn):
例如左側(cè)的導(dǎo)航條所有條目:

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements_by_css_selector('.service-bd li')
print(lis)
browser.close()
獲取多個(gè)節(jié)點(diǎn)的方法:
find_elements_by_id find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector
通用方法在這里同樣適用。
4、節(jié)點(diǎn)交互
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
# 輸入文字用send_keys()
input.send_keys('ipone')
time.sleep(1)
#清空文字用clear()
input.clear()
input.send_keys('ipad')
button = browser.find_element_by_class_name('btn-search')
#點(diǎn)擊
button.click()
5、動(dòng)作鏈
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
#找到被拖拽的標(biāo)簽
source = browser.find_element_by_css_selector('#draggable')
#找到拖拽目的地的標(biāo)簽
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform()
運(yùn)行結(jié)果如下:

6、執(zhí)行JavaScript
例如下拉進(jìn)度條,可以直接模擬運(yùn)行JavaScript,適用execute_script()即可實(shí)現(xiàn)
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
將滾動(dòng)條拉到底部,執(zhí)行結(jié)果如下:

7、獲取節(jié)點(diǎn)信息
獲取屬性

代碼如下:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
# 獲取class屬性
print(logo.get_attribute('class'))
獲取文本值

代碼如下:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)
輸出結(jié)果如下:

獲取id、位置、標(biāo)簽名和大小
以上面的標(biāo)簽為例:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)
# 輸出位置
print(input.location)
#標(biāo)簽名
print(input.tag_name)
#大小
print(input.size)
輸出結(jié)果:

8、界面切換
代碼如下:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#界面切換到子界面
browser.switch_to.frame('iframeResult')
try:
# 查找logo
logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
print('NO LOGO')
# 界面切換到父級(jí)界面
browser.switch_to.parent_frame()
# 查找logo
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)
9、延時(shí)等待
隱式等待
當(dāng)selenium沒(méi)有在DOM中找到節(jié)點(diǎn),繼續(xù)等待,超出設(shè)定時(shí)間,拋出異常
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
顯式等待
指定要查找的節(jié)點(diǎn),然后指定一個(gè)最長(zhǎng)等待時(shí)間,如果在規(guī)定時(shí)間內(nèi)加載出來(lái)節(jié)點(diǎn),返回節(jié)點(diǎn),如果超出規(guī)定時(shí)間,拋出異常。
browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser,10)
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
# 節(jié)點(diǎn)可點(diǎn)擊
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(input,button)
10、Cookies
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 獲取cookies
print(browser.get_cookies())
# 添加cookie
browser.add_cookie({'name':'name','domin':'www.zhihu.com','value':'germey'})
print(browser.get_cookies())
# 刪除所有的cookies
browser.delete_all_cookies()
print(browser.get_cookies())
輸出結(jié)果:

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Python+selenium 獲取瀏覽器窗口坐標(biāo)、句柄的方法
- 解決python selenium3啟動(dòng)不了firefox的問(wèn)題
- selenium + python 獲取table數(shù)據(jù)的示例講解
- selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法
- selenium+python實(shí)現(xiàn)1688網(wǎng)站驗(yàn)證碼圖片的截取功能
- Selenium(Python web測(cè)試工具)基本用法詳解
- Python使用Selenium模塊模擬瀏覽器抓取斗魚(yú)直播間信息示例
- Python實(shí)現(xiàn)的網(wǎng)頁(yè)截圖功能【PyQt4與selenium組件】
- python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法
- selenium+python 去除啟動(dòng)的黑色cmd窗口方法
- python3 selenium 切換窗口的幾種方法小結(jié)
- python selenium 對(duì)瀏覽器標(biāo)簽頁(yè)進(jìn)行關(guān)閉和切換的方法
相關(guān)文章
pytorch:model.train和model.eval用法及區(qū)別詳解
今天小編就為大家分享一篇pytorch:model.train和model.eval用法及區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能
這篇文章主要介紹了Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能的相關(guān)資料,需要的朋友可以參考下2016-03-03
關(guān)于Python中的向量相加和numpy中的向量相加效率對(duì)比
今天小編就為大家分享一篇關(guān)于Python中的向量相加和numpy中的向量相加效率對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
利用Python校準(zhǔn)本地時(shí)間的方法教程
這篇文章主要給大家介紹了關(guān)于如何利用Python校準(zhǔn)本地時(shí)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
深入理解Python變量的數(shù)據(jù)類型和存儲(chǔ)
這篇文章主要介紹了Python變量的數(shù)據(jù)類型和存儲(chǔ),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Django多數(shù)據(jù)庫(kù)配置及逆向生成model教程
這篇文章主要介紹了Django多數(shù)據(jù)庫(kù)配置及逆向生成model教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
使用Python實(shí)現(xiàn)屏幕截圖的兩種方法
Python作為一種高效的編程語(yǔ)言,可以通過(guò)一些庫(kù)來(lái)實(shí)現(xiàn)對(duì)屏幕的截圖操作,本文主要介紹了使用Python實(shí)現(xiàn)屏幕截圖的兩種方法,具有一定的 參考價(jià)值,感興趣的可以了解一下2023-12-12
python實(shí)現(xiàn)在字符串中查找子字符串的方法
這篇文章主要介紹了python實(shí)現(xiàn)在字符串中查找子字符串的方法,涉及Python中find方法的相關(guān)使用技巧,需要的朋友可以參考下2015-07-07

