Selenium的使用詳解
先來看一下功能實現(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 #聲明瀏覽器對象 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()
可以看到打開了百度網(wǎng)站,查詢了“Python”并且輸出了當(dāng)前的url,cookies還有網(wǎng)頁源代碼。
下面再來介紹詳細功能。
1、聲明瀏覽器對象。
browser = webdriver.Chrome() browser = webdriver.Firefox()
瀏覽器的對象初始化,并將其賦值給browser對象。
2.以淘寶為例,請求網(wǎng)頁。
browser = webdriver.Chrome() browser.get('https://www.taobao.com') print(browser.page_source) browser.close()
可以看到輸出了淘寶的源碼,隨后關(guān)閉。
3.查找節(jié)點
單個節(jié)點
提取搜索框這個節(jié)點
檢查搜索框如下:
查找搜索框:
browser = webdriver.Chrome() browser.get('https://www.taobao.com') # 通過id查找 input_first = browser.find_element_by_id('q') # 通過css查找 input_second = browser.find_element_by_css_selector('#q') # 通過xpath查找 input_third = browser.find_element_by_xpath('//*[@id="q"]') print(input_first,input_second,input_third) browser.close()
# 查找單個節(jié)點的方法 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()里面需要兩個參數(shù),查找方式By和值,
- 例如:find_element(By.ID,'q') 通過查找ID的當(dāng)時,查找id為q。
多個節(jié)點:
例如左側(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()
獲取多個節(jié)點的方法:
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é)點交互
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') #點擊 button.click()
5、動作鏈
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()
運行結(jié)果如下:
6、執(zhí)行JavaScript
例如下拉進度條,可以直接模擬運行JavaScript,適用execute_script()
即可實現(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")')
將滾動條拉到底部,執(zhí)行結(jié)果如下:
7、獲取節(jié)點信息
獲取屬性
代碼如下:
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') # 界面切換到父級界面 browser.switch_to.parent_frame() # 查找logo logo = browser.find_element_by_class_name('logo') print(logo) print(logo.text)
9、延時等待
隱式等待
當(dāng)selenium沒有在DOM中找到節(jié)點,繼續(xù)等待,超出設(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é)點,然后指定一個最長等待時間,如果在規(guī)定時間內(nèi)加載出來節(jié)點,返回節(jié)點,如果超出規(guī)定時間,拋出異常。
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é)點可點擊 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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Python+selenium 獲取瀏覽器窗口坐標(biāo)、句柄的方法
- 解決python selenium3啟動不了firefox的問題
- selenium + python 獲取table數(shù)據(jù)的示例講解
- selenium+python實現(xiàn)自動化登錄的方法
- selenium+python實現(xiàn)1688網(wǎng)站驗證碼圖片的截取功能
- Selenium(Python web測試工具)基本用法詳解
- Python使用Selenium模塊模擬瀏覽器抓取斗魚直播間信息示例
- Python實現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】
- python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法
- selenium+python 去除啟動的黑色cmd窗口方法
- python3 selenium 切換窗口的幾種方法小結(jié)
- python selenium 對瀏覽器標(biāo)簽頁進行關(guān)閉和切換的方法
相關(guān)文章
pytorch:model.train和model.eval用法及區(qū)別詳解
今天小編就為大家分享一篇pytorch:model.train和model.eval用法及區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02關(guān)于Python中的向量相加和numpy中的向量相加效率對比
今天小編就為大家分享一篇關(guān)于Python中的向量相加和numpy中的向量相加效率對比,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Django多數(shù)據(jù)庫配置及逆向生成model教程
這篇文章主要介紹了Django多數(shù)據(jù)庫配置及逆向生成model教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03