selenium的安裝
win+R 輸入cmd打開命令行:
pip install selenium
selenium的簡(jiǎn)介
申明瀏覽器的對(duì)象
from selenium import webdriver
browser = webdriver.Chrome ()
browser = webdriver.firefox()
browser = webdriver.Android()
browser = webdriver.Edge()
對(duì)應(yīng)的瀏覽器都需要下載對(duì)應(yīng)版本的驅(qū)動(dòng)束倍,并配置環(huán)境變量。
訪問(wèn)網(wǎng)頁(yè)
browser = webdriver.Chrome ()
browser.get("https://www.taobao.com")
print(browser.page_source)
browser.close()
運(yùn)行程序倔叼,得到如下:
查找元素
查找單個(gè)元素
browser = webdriver.Chrome ()
browser.get("https://www.taobao.com")
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()
上面代碼中的browser.find_element_by_id肛度、browser.find_element_by_css_selector郑现、browser.find_element_by_xpath實(shí)質(zhì)上是找的同一個(gè)元素夕春,只是查找的方式不同未荒。
所以,最終答應(yīng)出來(lái)的信息應(yīng)該是完全一樣的及志,如下圖:
查找多個(gè)元素
browser = webdriver.Chrome ()
browser.get("https://www.taobao.com")
lis = browser.find_elements_by_css_selector(".service-bd li")
print(lis)
browser.close()
其實(shí)片排,查找多個(gè)元素就是由查找單個(gè)原色的find_element變成了find_elements.用法和查找單個(gè)元素基本一致 。
另外一個(gè)用法是其“抽象方法”速侈,具體代碼示例如下:
browser = webdriver.Chrome ()
browser.get("https://www.taobao.com")
lis = browser.find_elements(By.CSS_SELECTOR,".service-bd li")
print(lis)
browser.close()
運(yùn)行結(jié)果和上訴一致:
元素交互操作
對(duì)獲取的元素進(jìn)行交互操作
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.taobao.com")
input = browser.find_element_by_id('q')
input.send_keys('IPhone')
time.sleep(1)
input.clear()
input.send_keys("IPad")
button = browser.find_element_by_class_name('btn-search')
button.click()
上訴代碼主要是打開淘寶網(wǎng)划纽,然后現(xiàn)在搜索框里面輸入“IPhone”,然后1s之后刪除锌畸,再次輸入“IPad”,點(diǎn)擊【搜索按鈕】靖避。
交互操作
可以將網(wǎng)頁(yè)中的一些元素進(jìn)行拖拽潭枣,需要引入ActionChains:
from selenium.webdriver import ActionChains
actions = ActionChains(source,target)
actions.perform()
執(zhí)行JavaScript
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
browser.execute_script('Windows.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Buttom")')
打開知乎比默,并下滑到頁(yè)面的最底端。
獲取元素信息
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class'))
上訴代碼是進(jìn)入知乎的首頁(yè)盆犁,并且找到知乎的logo信息命咐,然后將其class屬性打印出來(lái)。結(jié)果如下:
獲取屬性
上訴最后一行代碼即為獲取文本值
獲取文本值
獲取知乎【提問(wèn)】的文本值谐岁,代碼如下:
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
input = browser.find_element_by_id('zu-top-add-question')
print(input.text)
運(yùn)行的結(jié)果如下:
上圖可知醋奠,程序成功的將制定的按鈕的文本信息提取出來(lái)。
獲取ID伊佃、位置窜司、標(biāo)簽名、大小
對(duì)應(yīng)的代碼如下:
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
input = browser.find_element_by_id('zu-top-add-question')
print(input.id)
print(input.size)
print(input.location)
print(input.tag_name)
程序運(yùn)行得到以下的結(jié)果:
Frame
frame的本意是“架構(gòu)航揉,框架”塞祈,一個(gè)網(wǎng)頁(yè)可以理解為由多個(gè)frame組成,且這些frame之間有父子繼承關(guān)系帅涂。
當(dāng)元素所處的frame不確定時(shí)议薪,需要用相關(guān)的switch_to進(jìn)行相關(guān)的邏輯選擇。
等待
隱式等待
隱式等待的默認(rèn)時(shí)間是0媳友,就是在指定的時(shí)間內(nèi)找不到需要找的元素則會(huì)拋出相關(guān)的異常信息斯议。
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("http://www.zhihu.com/explore")
input = browser.find_element_by_id('zu-top-add-question')
print(input.text)
一般來(lái)說(shuō),只有在網(wǎng)速很慢的情況下有必要加載這個(gè)等待的時(shí)間設(shè)置醇锚。
顯示等待
顯式等待比較常用哼御,意思是按照編程的邏輯去查找一些元素,或者屬性搂抒,在指定的時(shí)間過(guò)去之后不能查找到艇搀,則拋出異常。
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
wait = WebDriverWait(browser,10)
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-search'))
print(input,button)
瀏覽器的前進(jìn)和后退
browser.back()
browser.forward()
Cookies
將筆記本里知乎里面所有的cookies打印出來(lái),然后全部刪除
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
程序運(yùn)行的結(jié)果是:
選項(xiàng)卡的管理
實(shí)質(zhì)上還是進(jìn)行相關(guān)的script操作:
browser.execute_script('window.open()')
往期好文:
大數(shù)據(jù)學(xué)習(xí)筆記之爬蟲系列(2)----爬蟲常用庫(kù)
大數(shù)據(jù)學(xué)習(xí)筆記之爬蟲系列(1)----爬蟲簡(jiǎn)介