如有幫助,還請留下腳步~~
傳送門:本文首次發(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)