【❤️爬蟲必備->Selenium從黑鐵到王者❤️】下篇——萬字博文詳解(建議收藏)

這是我參與8月更文挑戰的第10天,活動詳情查看:8月更文挑戰python

🐻4.動做鏈:

👑(1)講解:

  • 在selenium當中除了簡單的點擊動做外,還有一些稍微複雜的動做,就須要用到ActionChains(動做鏈)這個子模塊來知足咱們的需求。web

  • ActionChains能夠完成複雜一點的頁面交互行爲,例如元素的拖拽,鼠標移動,懸停行爲,內容菜單交互。 它的執行原理就是當調用ActionChains方法的時候不會當即執行,而是將全部的操做暫時儲存在一個隊列中,當調用perform()方法的時候,會按照隊列中放入的前後順序執行前面的操做。chrome

  • 導入ActionChains包:windows

from selenium.webdriver.common.action_chains import ActionChains瀏覽器

👑(2)方法:

ActionChains提供的方法 做用
click(on_element=None) 鼠標左鍵單擊傳入的元素
double_click(on_element=None) 雙擊鼠標左鍵
context_click(on_element=None) 點擊鼠標右鍵
click_and_hold(on_element=None) 點擊鼠標左鍵,按住不放
release(on_element=None) 在某個元素位置鬆開鼠標左鍵
drag_and_drop(source, target) 拖拽到某個元素而後鬆開
drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到某個座標而後鬆開
move_to_element(to_element) 鼠標移動到某個元素
move_by_offset(xoffset, yoffset) 移動鼠標到指定的x,y位置
move_to_element_with_offset(to_element, xoffset, yoffset) 將鼠標移動到距某個元素多少距離的位置
perform() 執行鏈中的全部動做

👑(3)示例:

示例:markdown

  1. 導包:from selenium.webdriver.common.action_chains import ActionChains
  2. 實例化ActionChains對象:Action=ActionChains(driver)
  3. 調用右鍵方法:element=Action.context_click(username)
  4. 執行:element.perform()

🐮5.提取節點文本內容和屬性值:

♥️(1)獲取文本內容:

  • element.text

  經過定位獲取的標籤對象的 text 屬性,獲取文本內容。app

♥️(2)獲取屬性值:

  • element.get_attribute('屬性名')

  經過定位獲取的標籤對象的 get_attribute()函數,傳入屬性名,來獲取屬性的值。函數

🐒6.執行JavaScript代碼:

  對於某些操做:Selenium是沒有提供相關的API的。好比:往下滑動頁面,可是Selenium偉大的創造者給了咱們另外一個更爲方便的方法——它能夠直接模擬運行JavaScript,使用execute_script()方法便可!

⚽️實戰演示:

📌①上代碼:

import time
from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E6%96%87%E5%BA%93/4928294?fr=aladdin')

# 執行JS代碼,滑動網頁至最底部!
js = 'window.scrollTo(0, document.body.scrollHeight)'
browser.execute_script(js)

# 執行JS代碼,彈窗提示文字!
browser.execute_script('alert("到達最底部啦!")')

time.sleep(3)
複製代碼

🐫7.標籤頁/窗口的切換:

💊(1)方法:

  用selenium操做瀏覽器若是須要再打開新的頁面,這個時候會有問題,由於咱們用selenium操做的是第一個打開的窗口,因此新打開的頁面咱們是沒法去操做的,因此咱們要用到切換窗口——即handle切換的方法!oop

方法 做用
js = 'window.open("www.baidu.com");'chrome.execute_script(js) 打開新標籤
window_handles 獲取全部頁面窗口的句柄
current_window_handle 獲取當前頁面窗口的句柄
switch_to.window(window_name) 定位頁面轉到指定的window_name頁面

注意:Window_handles的順序並非瀏覽器上標籤的順序,儘可能避免多標籤操做!post

💊(2)實戰演示:

🔆①思路解析:

窗口切換:
首先要獲取全部標籤頁的窗口句柄;
而後利用窗口句柄切換到句柄指向的標籤頁。
窗口句柄:指的是指向標籤頁對象的標識!
解析:
#1.獲取當前全部的標籤頁的句柄構成的列表
current_windows = driver.window_handles

#2.根據標籤頁句柄列表索引下標進行切換
driver.switch_to.window(windows[0])

🔆②上代碼:

import time
from selenium import webdriver

driver=webdriver.Chrome()

driver.get('https://www.baidu.com/')

time.sleep(1)
driver.find_element_by_id('kw').send_keys('python')
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(1)

# 經過執行js來新開一個標籤頁
js = "window.open('https://www.sougou.com');"
driver.execute_script(js)
time.sleep(1)

# 1.獲取當前全部的窗口
windows = driver.window_handles

time.sleep(2)
# 2.根據窗口索引進行切換
driver.switch_to.window(windows[0])
time.sleep(2)
driver.switch_to.window(windows[1])

time.sleep(6)
driver.quit()
複製代碼

🔮In The End!

請添加圖片描述

從如今作起,堅持下去,一天進步一小點,不久的未來,你會感謝曾經努力的你!

本博主會持續更新爬蟲基礎分欄及爬蟲實戰分欄,認真仔細看完本文的小夥伴們,能夠點贊收藏並評論出大家的讀後感。並可關注本博主,在從此的日子裏閱讀更多爬蟲文!

若有錯誤或者言語不恰當的地方可在評論區指出,謝謝!

如轉載此文請聯繫我徵得本人贊成,並標註出處及本博主名,謝謝 !

相關文章
相關標籤/搜索