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

如有幫助谓娃,還請(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)

不懂或有疑問等任何問題還請(qǐng)私信或評(píng)論

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝉娜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扎唾,更是在濱河造成了極大的恐慌召川,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽屏,死亡現(xiàn)場(chǎng)離奇詭異扮宠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狐榔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門坛增,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薄腻,你說我怎么就攤上這事收捣。” “怎么了庵楷?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵罢艾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我尽纽,道長(zhǎng)咐蚯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任弄贿,我火速辦了婚禮春锋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘差凹。我一直安慰自己期奔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布危尿。 她就那樣靜靜地躺著呐萌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谊娇。 梳的紋絲不亂的頭發(fā)上肺孤,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼渠旁。 笑死攀例,一個(gè)胖子當(dāng)著我的面吹牛船逮,可吹牛的內(nèi)容都是我干的顾腊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼挖胃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杂靶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酱鸭,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤吗垮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后凹髓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁登,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年蔚舀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饵沧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赌躺,死狀恐怖狼牺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情礼患,我是刑警寧澤是钥,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缅叠,受9級(jí)特大地震影響悄泥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肤粱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一弹囚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狼犯,春花似錦余寥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓢姻,卻和暖如春祝蝠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工绎狭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留细溅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓儡嘶,卻偏偏與公主長(zhǎng)得像喇聊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹦狂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容