Selenium 庫

自動化測試工具,支持多種瀏覽器。爬蟲中主要用來解決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')
相關文章
相關標籤/搜索