如有幫助谓娃,還請(qǐng)留下腳步~~
傳送門:本文首次發(fā)表地址
一襟士、前期準(zhǔn)備
1侠仇、在終端進(jìn)行selenium的安裝
pip install selenium
2忍啸、下載一個(gè)瀏覽器的驅(qū)動(dòng)程序
這里使用谷歌瀏覽器,點(diǎn)這下載谷歌瀏覽器驅(qū)動(dòng)
注意:需要選擇對(duì)應(yīng)自己電腦瀏覽器的版本精居。
3棒搜、將下載好的谷歌瀏覽器驅(qū)動(dòng)程序移動(dòng)到當(dāng)前項(xiàng)目下(可不用移動(dòng),填寫路徑)
二嘿般、基礎(chǔ)操作
1段标、實(shí)例化一個(gè)瀏覽器對(duì)象
from selenium import webdriver
# 實(shí)例化一個(gè)瀏覽器對(duì)象(傳入瀏覽器的驅(qū)動(dòng)程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
2、對(duì)url發(fā)起請(qǐng)求
# 對(duì)url發(fā)起請(qǐng)求
driver.get('URL')
3炉奴、標(biāo)簽定位
此處以搜索框?yàn)槔婆樱@取其id,使用find_element_by_id()對(duì)其定位瞻赶。
# 標(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砸逊、點(diǎn)擊按鈕
點(diǎn)擊搜索按鈕璧南,在瀏覽器中使用開發(fā)者工具定位搜索按鈕的id,click() 進(jìn)行點(diǎn)擊师逸。
# 點(diǎn)擊搜索按鈕
btn = driver.find_element_by_id('id')
btn.click()
6穆咐、回退、前進(jìn)和關(guān)閉
# 回退
driver.back()
# 前進(jìn)
driver.forward()
# 關(guān)閉瀏覽器
driver.quit()
7字旭、解析數(shù)據(jù)
# 導(dǎo)包
from selenium import webdriver
from lxml import etree
from time import sleep
# 實(shí)例化一個(gè)瀏覽器對(duì)象(傳入瀏覽器的驅(qū)動(dòng)程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 發(fā)起一個(gè)指定url請(qǐng)求
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程序使得瀏覽器向下滾動(dòng)一屏距離。
# 執(zhí)行一組JavaScript程序
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
9遗淳、實(shí)現(xiàn)無可視化界面的操作(無頭瀏覽器)
# 實(shí)現(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拍柒、實(shí)現(xiàn)規(guī)避檢測(cè)(去除瀏覽器識(shí)別)
# 實(shí)現(xiàn)規(guī)避檢測(cè)
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。
這個(gè)在登錄QQ空間時(shí)可以用到养叛,想學(xué)的可以點(diǎn)這里去學(xué)習(xí)种呐。
當(dāng)然,不止是QQ空間又iframe標(biāo)簽弃甥,還有很多地方也是有的爽室。
# 如果定位的標(biāo)簽是存在與iframe標(biāo)簽之中的則必須通過如下操作再進(jìn)行標(biāo)簽定位
bro.switch_to.frame('iframeResult') # 切換瀏覽器標(biāo)簽定位的作用域
div = bro.find_element_by_id('draggable')
12、動(dòng)作鏈
鼠標(biāo)動(dòng)作:左鍵單擊按住→拖動(dòng)→釋放
這就是動(dòng)作鏈
這個(gè)可以用在很多登錄驗(yàn)證的地方淆攻,那些需要滑動(dòng)驗(yàn)證的阔墩,都可以去嘗試一下嘿架。
from selenium import webdriver
from time import sleep
# 導(dǎo)入動(dòng)作鏈對(duì)應(yīng)的類
from selenium.webdriver import ActionChains
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
driver.get('URL')
# 如果定位的標(biāo)簽是存在與iframe標(biāo)簽之中的則必須通過如下操作再進(jìn)行標(biāo)簽定位
driver.switch_to.frame('iframeResult') # 切換瀏覽器標(biāo)簽定位的作用域
div = driver.find_element_by_id('id')
# 動(dòng)作鏈
action = ActionChains(driver)
# 點(diǎn)擊長(zhǎng)按指定的標(biāo)簽
action.click_and_hold(div)
# 這里可以不適用循環(huán),看個(gè)人愛好
for i in range(5):
# perform()立即執(zhí)行動(dòng)作鏈操作
# move_by_offset(x, y):x水平方向 y豎直方向
action.move_by_offset(20, 0).perform()
sleep(0.5)
# 釋放動(dòng)作鏈
action.release()
sleep(2)
driver.quit()
13啸箫、解決特征識(shí)別
這個(gè)特征識(shí)別在很多地方都可以用得上耸彪,特別是12306登錄滑塊驗(yàn)證的時(shí)候,非常nice忘苛!
關(guān)于12306如何使用selenium登錄可以點(diǎn)這里進(jìn)行學(xué)習(xí)
# 解決特征識(shí)別
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
bro.execute_script(script)