自動化爬蟲selenium基礎(chǔ)教程

如有幫助,還請留下腳步~~

傳送門:本文首次發(fā)表地址

一、前期準(zhǔn)備

1、在終端進行selenium的安裝

pip install selenium

2、下載一個瀏覽器的驅(qū)動程序

這里使用谷歌瀏覽器,點這下載谷歌瀏覽器驅(qū)動

注意:需要選擇對應(yīng)自己電腦瀏覽器的版本。

3、將下載好的谷歌瀏覽器驅(qū)動程序移動到當(dāng)前項目下(可不用移動,填寫路徑)

二、基礎(chǔ)操作

1、實例化一個瀏覽器對象

from selenium import webdriver

# 實例化一個瀏覽器對象(傳入瀏覽器的驅(qū)動程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')

2、對url發(fā)起請求

# 對url發(fā)起請求
driver.get('URL')

3、標(biāo)簽定位

此處以搜索框為例,獲取其id,使用find_element_by_id()對其定位。

# 標(biāo)簽定位
search_input = driver.find_element_by_id('id')

如果是class:

# 標(biāo)簽定位
search_input = driver.find_element_by_class_name('className')

4、標(biāo)簽交互

使用send_keys在搜索框中輸入需要搜索的關(guān)鍵字。

# 標(biāo)簽交互
search_input.send_keys('CSDN')

5、點擊按鈕

點擊搜索按鈕,在瀏覽器中使用開發(fā)者工具定位搜索按鈕的id,click() 進行點擊。

# 點擊搜索按鈕
btn = driver.find_element_by_id('id')
btn.click()

6、回退、前進和關(guān)閉

# 回退
driver.back()

# 前進
driver.forward()

# 關(guān)閉瀏覽器
driver.quit()

7、解析數(shù)據(jù)

# 導(dǎo)包
from selenium import webdriver
from lxml import etree
from time import sleep

# 實例化一個瀏覽器對象(傳入瀏覽器的驅(qū)動程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 發(fā)起一個指定url請求
driver.get('URL')

# 獲取瀏覽器當(dāng)前頁面的頁面源碼數(shù)據(jù)
page_text = driver.page_source

# 解析詳細(xì)數(shù)據(jù)
tree = etree.HTML(page_text)
li_list = tree.xpath('xpath路徑')
for li in li_list:
    name = li.xpath('以li_list下的xpath路徑')[0]
    print(name)

sleep(5)
driver.quit()

8、執(zhí)行JavaScript程序

這里執(zhí)行JavaScript程序使得瀏覽器向下滾動一屏距離。

# 執(zhí)行一組JavaScript程序
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

9、實現(xiàn)無可視化界面的操作(無頭瀏覽器)

# 實現(xiàn)無可視化界面的操作
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=chrome_options)

10、實現(xiàn)規(guī)避檢測(去除瀏覽器識別)

# 實現(xiàn)規(guī)避檢測
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=option)

11、iframe的處理

如果定位的標(biāo)簽存在于iframe標(biāo)簽之中,則須使用switch_to.frame(id),這里的id是iframe標(biāo)簽中的id。

這個在登錄QQ空間時可以用到,想學(xué)的可以點這里去學(xué)習(xí)。

當(dāng)然,不止是QQ空間又iframe標(biāo)簽,還有很多地方也是有的。

# 如果定位的標(biāo)簽是存在與iframe標(biāo)簽之中的則必須通過如下操作再進行標(biāo)簽定位
bro.switch_to.frame('iframeResult')  # 切換瀏覽器標(biāo)簽定位的作用域
div = bro.find_element_by_id('draggable')

12、動作鏈

鼠標(biāo)動作:左鍵單擊按住→拖動→釋放

這就是動作鏈

這個可以用在很多登錄驗證的地方,那些需要滑動驗證的,都可以去嘗試一下。

from selenium import webdriver
from time import sleep
# 導(dǎo)入動作鏈對應(yīng)的類
from selenium.webdriver import ActionChains

driver = webdriver.Chrome(executable_path='./chromedriver.exe')

driver.get('URL')

# 如果定位的標(biāo)簽是存在與iframe標(biāo)簽之中的則必須通過如下操作再進行標(biāo)簽定位
driver.switch_to.frame('iframeResult')  # 切換瀏覽器標(biāo)簽定位的作用域
div = driver.find_element_by_id('id')

# 動作鏈
action = ActionChains(driver)
# 點擊長按指定的標(biāo)簽
action.click_and_hold(div)

# 這里可以不適用循環(huán),看個人愛好
for i in range(5):
    # perform()立即執(zhí)行動作鏈操作
    # move_by_offset(x, y):x水平方向  y豎直方向
    action.move_by_offset(20, 0).perform()
    sleep(0.5)

# 釋放動作鏈
action.release()

sleep(2)

driver.quit()

13、解決特征識別

這個特征識別在很多地方都可以用得上,特別是12306登錄滑塊驗證的時候,非常nice!

關(guān)于12306如何使用selenium登錄可以點這里進行學(xué)習(xí)

# 解決特征識別
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
bro.execute_script(script)

不懂或有疑問等任何問題還請私信或評論

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容