Selenium庫裏有一個叫WebDriver的API。WebDriver可以控制瀏覽器的操作,它可以像BeautifulSoup或者其它Selector對象一樣用來查找頁面元素,與頁面上的元素進行交互(發送文本、點擊等),以及執行其他動作來運行網絡爬蟲,我們常用的函數大多都是webdriver裏面的函數。
(一) chrome啓動選項
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
# 實例化一個啓動參數對象
options = Options()
#添加啓動參數
options.add_argument('--incognito') #隱身模式
options.add_argument('--headless') #無界面運行
options.add_argument('--window-size=1366,768') #設置瀏覽器分辨率
#這裏是用chrome瀏覽器,executable_path參數是driver的路徑
driver = Chrome(executable_path="driver路徑",options=options)
driver.get("網頁地址")
關於啓動參數的介紹,大家可以參考這篇博文。
(二)瀏覽器界面設置
#給瀏覽器設置固定的寬和高
driver.set_window_size(480, 800)
#將瀏覽器最大化
driver.maximize_window()
(三)定位元素
driver.find_element_by_id
driver.find_element_by_name
driver.find_element_by_xpath
driver.find_element_by_link_text
driver.find_element_by_partial_link_text
#通過標籤的名字來定位
driver.find_element_by_tag_name
driver.find_element_by_class_name
driver.find_element_by_css_selector
關於如何使用xpath和css_selector,可以參考我之前轉發的博文。
(四)
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
options = Options()
driver = Chrome(executable_path="E:\\Ksoftware\\chromedriver\\chromedriver.exe",options=options)
driver.get("http://www.baidu.com")
driver.find_element_by_link_text("新聞").click()
driver.back()
location_xinwen = driver.find_element_by_class_name("mnav")
#用text獲得文本
print("text is:"+location_xinwen.text)
#用get_attribute方法獲得某標籤的屬性
all_a = driver.find_elements_by_tag_name("a")
for a in all_a:
print("href is:"+a.get_attribute("href"))
Out:
在第四部分中,我們學習了
1.click()
2.text
3.get_attribute()
(五)鼠標動作鏈
#導入ActionChains類
from selenium.webdrive import ActionChains
#鼠標移動到ac位置
ac = driver.find_elenemt_by_xpath('element')
ActionChains(driver).move_to_element(ac).perform()
#在ac位置單擊
ac = driver.find_element_by_xpath('elementA')
ActionChains(driver).move_to_element(ac).click(ac).perform()
#在ac位置雙擊
ac = driver.find_element_by_xpath("elementB")
ActionChains(driver).move_to_element(ac).double_click(ac).perform()
#在ac位置右擊
ac = driver.find_element_by_xpath('elementC')
ActionChains(driver).move_to_element(ac).context_click(ac).perform()
#在ac位置左鍵單擊hold住
ac = driver.find_element_by_xpath('elementF')
ActionChains(driver).move_to_element(ac).click_and_hold(ac).perform()
#將ac1拖拽到ac2位置
ac1 = driver.find_element_by_xpath('elementD')
ac2 = driver.find_element_by_xpath('elementE')
ActionChains(driver).drag_and_drop(ac1, ac2).perform()
(六)向文本框輸入文字
向文本框輸入文字的方法其實很簡單,先要定位到文本框,然後向其傳入字符串,最後提交表單即可。
#清除定位到的輸入框中的內容
driver.find_element_by_id("").clear()
#輸入內容
driver.find_element_by_id("").send_keys("")
#點擊“百度一下”進行搜索
driver.find_element_by_id("").click()
#也可以把click的動作換成submit提交,作用應該是一樣的
driver.find_element_by_id("").submit()
使用send_keys()的時候,我們可在字符串前面加u,就可以解決輸入中文報錯的問題。
(七)多層框架或窗口的定位
遇到frame嵌套頁面,直接定位是定位不到的,這時候就需要我們用下面的代碼了。
switch_to_frame()
switch_to_windows("windowsName")
#也可以使用window_handles方法來獲取每個窗口的操作對象
for handle in driver.window_handles:
driver.switch_to_window(handle)
更多的介紹,可以點擊這裏查看。
(八)定位一組元素
這裏有一篇優秀的博文,介紹如果把頁面上所有的checkbox勾選上,以及如何去掉勾選上的框等等。
(九)處理下拉框
對於下拉框的處理有一點不太一樣,我們必須要選定爲到下拉框的元素,然後選擇下拉列表中的選項進行點擊操作。
我們還可以通過Select類來處理下拉框
#導入Select類
from selenium.webdriver.support.ui import Select
#找到name的選項卡
select = Select(driver.find_element_by_name(' '))
#index索引從0開始
select.select_by_index(1)
#value是option標籤的一個屬性值,並不是顯示在下拉框中的值
select.select_by_value(" ")
#visible_text實在option標籤文本的值,是顯示在下拉框的值
select.select_by_visible_text(u' ')
#全部取消選擇
select.deselect_all()
(十)顯式等待
顯示等待是指定某一條件知道這個條件成立時繼續執行。 顯示等待指定了某個條件,然後設置最長等待事件。如果在這個時間還找到沒有元素,那麼便會拋出異常。
selenium已經有很多內置的等待條件,我們可以直接調用。
(十一)鍵盤按鍵操作
from selenium.webdriver.common.keys import Keys
#全選輸入框內容
driver.find_element_by_id("").send_keys(Keys.CONTROL,'a')
(十二)雜七雜八
#可以利用time庫,設置等待時間,以防頁面未完全加載就開始進行操作,造成錯誤
import time
time.sleep()
#也可以使用selenium庫中的函數,這個方法可以在一個時間範圍內智能等待
implicitly_wait()
#頁面的前進和後退
driver.forward()
driver.back()
#生成頁面快照,當瀏覽器設置爲無界面時,可以使用該方法查看爬蟲過程
save_screenshot("photo name")
#打印網頁渲染後的源代碼
driver.page_source
#接受頁面中的警告信息
driver.switch_to_alert().accept()
#selenium還可以執行javascript腳本
execute_script("document.title")
#控制滾動條到底部
js = "var q = documentElement.scrollTop=10000000"
driver.execute_script(js)
#滾動屏幕
driver.execute_script("window.scrollBy(0, 700)")
#獲得cookie
get_cookies()
#刪除特定的cookie
delete_cookie("cookie_name")
#刪除所有的cookie
delete_all_cookie()
本篇博文參考了一些學習資料,基本上把常用的都提到了,由於關於selenium的知識點特別零碎,這篇博文看起來沒有什麼邏輯,條理也沒有很清晰,還請見諒。