seleniun學習(python)

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

關於如何使用xpathcss_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的知識點特別零碎,這篇博文看起來沒有什麼邏輯,條理也沒有很清晰,還請見諒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章