Python 爬蟲類庫 Selenium 的常用方法介紹


Selenium 簡介

Selenium 是一個 Web 的自動化測試工具,最初是為網站自動化測試而開發的,類型像我們玩游戲用的按鍵精靈,可以按指定的命令自動操作,不同是 Selenium 可以直接運行在瀏覽器上,它支持所有主流的瀏覽器(包括 PhantomJS 這些無界面的瀏覽器)。
Selenium 可以根據我們的指令,讓瀏覽器自動加載頁面,獲取需要的數據,甚至頁面截屏,或者判斷網站上某些動作是否發生。
Selenium 自己不帶瀏覽器,不支持瀏覽器的功能,它需要與第三方瀏覽器結合在一起才能使用。
先下載 selenium webdriver geckodriver.exe,下載好后放到 python 目錄里面。
Firefox 的目錄也要添加到環境變量中。
Selenium 庫里有個叫 WebDriver 的 API。WebDriver 有點兒像可以加載網站的瀏覽器,但是它也可以像 BeautifulSoup 或者其他 Selector 對象一樣用來查找頁面元素,與頁面上的元素進行交互(發送文本、點擊等),以及執行其他動作來運行網絡爬蟲。

Selenium 快速入門

# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想調用鍵盤按鍵操作需要引入 keys 包
from selenium.webdriver.common.keys import Keys

# 創建瀏覽器對象
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

# 打印頁面標題“百度一下你就知道”
print(driver.title)

# 生成當前頁面快照
driver.save_screenshot("baidu.png")

# 是百度搜索框,輸入字符串“微博”,跳轉到搜索頁面
driver.find_element_by_id("kw").send_keys(u"微博")

# 是百度搜索按鈕,click() 是模擬點擊
driver.find_element_by_id("su").click()

# 獲取新的頁面快照
driver.save_screenshot(u"screenshot.png")

# 打印網頁渲染后的源代碼
print(driver.page_source)

# 獲取當前頁面 Cookie
print(driver.get_cookies())

# ctrl+a 全選輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')

# ctrl+x 剪切輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')

# 輸入框重新輸入內容
driver.find_element_by_id("kw").send_keys("test")

# 模擬 Enter 回車鍵
driver.find_element_by_id("su").send_keys(Keys.RETURN)

# 清除輸入框內容
driver.find_element_by_id("kw").clear()

# 生成新的頁面快照
driver.save_screenshot("test.png")

# 獲取當前 url
print(driver.current_url)

# 關閉當前頁面,如果只有一個頁面,會關閉瀏覽器
driver.close()

# 關閉瀏覽器
driver.quit()
1、頁面操作

假如有下面的輸入框:

<input type="text" name="user-name" id="passwd-id" />

查找方法如下:

# 獲取 id 標簽值
element = driver.find_element_by_id("passwd-id")
# 獲取 name 標簽值
element = driver.find_element_by_name("user-name")
# 獲取標簽名值
element = driver.find_elements_by_tag_name("input")
# 也可以通過 XPath 來匹配
element = driver.find_element_by_xpath("//input[@]")
2、定位元素
# 通過 Id 定位目標元素
driver.find_element_by_id('i1')
 
# 通過 className 定位目標元素,返回一個對象
driver.find_element_by_class_name('c1')
 
# 通過 name 屬性定位目標元素,返回一個對象
driver.find_element_by_name('n1')
 
# 通過 Xpath 定位目標元素,返回一個對象
driver.find_element_by_xpath('//*[@id="i1"]')
 
# 通過 css Selector 定位目標元素,返回一個對象
driver.find_element_by_css_selector('#i1')
 
# 通過標簽名稱定位,返回一個對象
driver.find_element_by_tag_name('input')
 
# 通過標簽中的文本查找元素,返回一個對象
driver.find_element_by_link_text('登錄')

一次查找多個元素(這些方法會返回一個 list 列表):

# 通過 className 定位目標元素,返回一個集合
driver.find_elements_by_class_name('c1')
 
# 通過 name 屬性定位目標元素,返回一個集合
driver.find_elements_by_name('n1')
 
# 通過 Xpath 定位目標元素,返回一個集合
driver.find_elements_by_xpath('//*[@id="i1"]')
 
# 通過 Css Selector 定位目標元素,返回一個集合
driver.find_elements_by_css_selector('#i1')
 
# 通過標簽名稱定位,返回一個集合
driver.find_elements_by_tag_name('input')
 
# 通過標簽中的文本查找元素,返回一個集合
driver.find_element_by_link_text('登錄')

# 通過標簽中文本的模糊匹配查找,返回一個集合
find_elements_by_partial_link_text("訂單")
3、鼠標動作
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想調用鍵盤按鍵操作需要引入 keys 包
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
# 創建瀏覽器對象
driver = webdriver.Firefox()
# 打開頁面
driver.get("http://www.baidu.com")
# 鼠標移動到某處
action1 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action1).perform()
# 鼠標移動到某處單擊
action2 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action2).click(action2).perform()
# 鼠標移動到某處雙擊
action3 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action3).double_click(action3).perform()
# 鼠標移動到某處右擊
action4 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action4).context_click(action4).perform()
4、Select 表單
# 導入 Select 類
from selenium.webdriver.support.ui import Select

# 找到 name 的選項卡
select = Select(driver.find_element_by_name('status'))

select.select_by_index(1)
select.select_by_value("0")
select.select_by_visible_text(u"xxx")

以上是三種選擇下拉框的方式,它可以根據索引來選擇,可以根據值來選擇,可以根據文字來選擇。注意:

index 索引從 0 開始
value 是 option 標簽的一個屬性值,並不是顯示在下拉框中的值
visible_text 是在 option 標簽文本的值,是顯示在下拉框的值

全部取消方法

select.deselect_all()
5、彈窗處理

當頁面出現了彈窗提示:

alert = driver.switch_to_alert()
6、頁面切換

一個瀏覽器肯定會有很多窗口,所以我們肯定要有方法來實現窗口的切換。切換窗口的方法如下:

driver.switch_to.window("this is window name")
7、頁面前進和后退
driver.forward()     #前進
driver.back()        # 后退

8、模擬登陸豆瓣網站

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("http://www.douban.com")
# 輸入賬號密碼
driver.find_element_by_name("form_email").send_keys("158xxxxxxxx")
driver.find_element_by_name("form_password").send_keys("zhxxxxxxxx")
# 模擬點擊登錄
driver.find_element_by_xpath("//input[@]").click()
# 等待3秒
time.sleep(3)
# 生成登陸后快照
driver.save_screenshot(u"douban.png")
driver.quit()

以上就是 Selenium 的一些常用方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM