自動化測試工具,支持多種瀏覽器。爬蟲中主要用來解決JavaScript渲染問題。php
用法css
基本使用html
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.Firefox() #能夠任何的瀏覽器 try: browser.get('https://www.baidu.com') #get() 方法 input = browser.find_element_by_id('kw') #找到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) #打印當前URL print(browser.get_cookies()) #打印cookie print(browser.page_source) #網頁源碼 finally: ''' browser.close()'''
先下載對應的驅動:https://github.com/mozilla/geckodriver/releasespython
以FireFox的驅動 geckodriver爲例。下載後,建議能夠直接放在FireFox的默認安裝目錄(C:\Program Files (x86)\Mozilla Firefox\)。jquery
最重要一點:系統環境變量PATH裏,添加上FireFox的安裝路徑。git
聲明瀏覽器對象github
首先要引入webdriver包web
from selenium import webdriverapi
browser = webdriver.Chrome()瀏覽器
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
訪問頁面
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
print(browser.page_source)
browser.close()
查找元素
單個元素
from selenium import webdriver
browser = webdriver.Firefox() browser.get('http://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_name()
browser.find_element_by_xpath()
browser.find_element_by_link_text()
browser.find_element_by_partial_link_text()
browser.find_element_by_tag_name()
browser.find_element_by_class_name()
browser.find_element_by_css_selector()
通用的方式
from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Firefox() browser.get('http://www.taobao.com') input_first =browser.find_element(By.ID,'q') #這種方式來獲取Id print(input_first) browser.close()
多個元素
from selenium import webdriver browser = webdriver.Firefox() browser.get('http://www.taobao.com') lis =browser.find_elements_by_css_selector('.service-bd li') print(lis) for item in lis: print(item) browser.close()
元素交互操做
from selenium import webdriver import time browser = webdriver.Firefox() browser.get('http://www.taobao.com') inp = browser.find_element_by_id('q') inp.send_keys('iPhone') time.sleep(1) inp.clear() inp.send_keys('iPad') button = browser.find_element_by_class_name('btn-search') button.click()
交互動做
將動做附加到動做鏈中串行執行
from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Firefox() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') source = browser.find_element_by_css_selector('#draggable') target=browser.find_element_by_css_selector('#droppable') actions=ActionChains(browser) actions.drag_and_drop(source,target) actions.perform()
更多內容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
執行JavaScript
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
打開知乎 拖動滾動條 到底部 彈出 To Bottom
獲取元素信息
獲取屬性
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
logo=browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class'))
獲取文本值
from selenium import webdriver
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
inp=browser.find_element_by_class_name('zu-top-add-question')
print(inp.text)
輸出:
提問
獲取ID、位置、標籤名、大小
from selenium import webdriver
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
inp=browser.find_element_by_class_name('zu-top-add-question')
print(inp.text)
print(inp.id)
print(inp.location)
print(inp.tag_name)
print(inp.size)
輸出:
提問
cfbbf4a5-ae09-4e04-bd47-ec0d98ecfdbe
{'x': 874, 'y': 7}
button
{'height': 32.0, 'width': 66.0}
Frame
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Firefox()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult') #跳轉到iframe中
source=browser.find_element_by_css_selector('#draggable')
print(source)
try:
logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
print('No LOGO')
browser.switch_to.parent_frame() #切換到父frame
logo=browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)
等待
隱式等待
from selenium import webdriver
browser=webdriver.Firefox()
browser.implicitly_wait(10) #等待時間 10秒
browser.get('https://www.zhihu.com/explore')
inp = browser.find_element_by_class_name('zu-top-add-question')
print(inp)
顯示等待
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
browser=webdriver.Firefox()
browser.get('https://www.taobao.com')
wait=WebDriverWait(browser,1) #等待時間 1秒
imp = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(imp,button)
前進後退
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('https://www.zhihu.com')
browser.back()
time.sleep(1)
browser.forward()
browser.close()
Cookies
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
選項卡管理
import timefrom selenium import webdriverbrowser = webdriver.Firefox()browser.get('https://www.baidu.com')browser.execute_script('window.open()')print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get('http://www.taobao.com')time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.get('http://www.zhihu.com')