版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第教你快速上手Selenium爬蟲,萬(wàn)物皆可爬目錄一、基本使用二、查找節(jié)點(diǎn)2.1查找單個(gè)節(jié)點(diǎn)2.2查找多個(gè)節(jié)點(diǎn)三、節(jié)點(diǎn)交互四、動(dòng)作鏈五、執(zhí)行JavaScript代碼六、獲取節(jié)點(diǎn)信息七、管理Cookies八、改變節(jié)點(diǎn)屬性的值
一、基本使用
selenium的基本使用步驟:
打開瀏覽器;
獲取瀏覽器頁(yè)面的特定內(nèi)容;
控制瀏覽器頁(yè)面上的控件,如向一個(gè)文本框中輸入一個(gè)字符串;
關(guān)閉瀏覽器。
示例:
fromseleniumimportwebdriver
frommon.keysimportKeys
frommon.byimportBy
fromselenium.webdriver.support.waitimportWebDriverWait
fromselenium.webdriver.supportimportexpected_conditionsasec
browser=webdriver.Chrome()
browser.get('')
input_t=browser.find_element_by_id('key')
input_t.send_keys('python爬蟲')
input_t.send_keys(Keys.ENTER)#模擬按下Enter鍵位
wait=WebDriverWait(browser,4)#設(shè)置最長(zhǎng)等待時(shí)間4秒
wait.until(ec.presence_of_all_elements_located((By.ID,'J_goodsList')))
print(browser.title)#顯示搜索頁(yè)面的標(biāo)題
print(browser.current_url)
print(browser.page_source)
browser.close()
exceptExceptionase:
print(e)
browser.close()
二、查找節(jié)點(diǎn)
2.1查找單個(gè)節(jié)點(diǎn)
html源碼如下:
!DOCTYPEhtml
htmllang="en"
head
metacharset="UTF-8"
title表單/title
/head
body
script
functiononclick_form(){
alert(document.getElementById('name').value+
document.getElementById('age').value+
document.getElementsByName('country')[0].value+
document.getElementsByClassName('myclass')[0].value)
/script
姓名:inputid="name"p/p
年齡:inputid="age"p/p
國(guó)家:inputname="country"p/p
收入:inputp/p
button提交/button
/body
/html
樣式如下圖所示:
python代碼自動(dòng)填充上圖中的表單:
fromseleniumimportwebdriver
frommon.byimportBy
#不支持本地網(wǎng)頁(yè)
browser=webdriver.Chrome()
#這里我是用flask自己搭建的一個(gè)服務(wù)訪問該頁(yè)面即可打開demo.html
browser.get(':5000/')
input_t=browser.find_element_by_id('name')#通過(guò)id屬性查找姓名input節(jié)點(diǎn)
input_t.send_keys('Amo')#自動(dòng)輸入
input_t=browser.find_element_by_id('age')
input_t.send_keys('18')
input_t=browser.find_element_by_name('country')#通過(guò)name屬性查找國(guó)家input節(jié)點(diǎn)
input_t.send_keys('中國(guó)')
#通過(guò)class屬性查找收入input節(jié)點(diǎn)
input_t=browser.find_element_by_class_name('myclass')
input_t.send_keys('1850')
#或下面的代碼
input_t=browser.find_element(By.CLASS_NAME,'myclass')
#要想覆蓋前面的輸入,需要清空input節(jié)點(diǎn),否則會(huì)在input節(jié)點(diǎn)原來(lái)的內(nèi)容后面追加新內(nèi)容
input_t.clear()
input_t.send_keys('3500')
exceptExceptionase:
print(e)
browser.close()
效果如下圖所示:
2.2查找多個(gè)節(jié)點(diǎn)
示例代碼如下:
fromseleniumimportwebdriver
frommon.byimportBy
#不支持本地網(wǎng)頁(yè)
browser=webdriver.Chrome()
browser.get('')#打開京東
#根據(jù)節(jié)點(diǎn)名查找所有名為li的節(jié)點(diǎn)
li_list=browser.find_elements_by_tag_name('li')
#輸出節(jié)點(diǎn)本身
print(li_list)
print(len(li_list))
print(li_list[0].text)
ul=browser.find_elements(By.TAG_NAME,'ul')
print(ul)
print(ul[0].text)
browser.close()
exceptExceptionase:
print(e)
browser.close()
三、節(jié)點(diǎn)交互
使用selenium通過(guò)模擬瀏覽器單擊動(dòng)作循環(huán)單擊頁(yè)面上的6個(gè)按鈕,單擊每個(gè)按鈕后,按鈕下方的div就會(huì)按照按鈕的背景顏色設(shè)置div的背景色。
demo1.html靜態(tài)頁(yè)面代碼如下:
!DOCTYPEhtml
htmllang="en"
head
metacharset="UTF-8"
title彩色按鈕/title
/head
body
script
functiononclick_color(e){
document.getElementById("bgcolor").style.background=e.style.background
/script
button按鈕1/button
button按鈕2/button
button按鈕3/button
button按鈕4/button
button按鈕5/button
button按鈕6/button
p/p
divid="bgcolor"
/div
/body
/html
然后使用Python代碼模擬瀏覽器的單擊動(dòng)作自動(dòng)單擊頁(yè)面上的6個(gè)按鈕。P
ython代碼如下所示:
fromseleniumimportwebdriver
importtime
browser=webdriver.Chrome()
browser.get(':5000/')
buttons=browser.find_elements_by_class_name('mybutton')
i=0
whileTrue:
buttons[i].click()
time.sleep(1)
i+=1
ifi==len(buttons):
i=0
exceptExceptionase:
print(e)
browser.close()
四、動(dòng)作鏈
使用selenium動(dòng)作鏈的move_to_element方法模擬鼠標(biāo)移動(dòng)的動(dòng)作,自動(dòng)顯示京東商城首頁(yè)左側(cè)的每個(gè)二級(jí)導(dǎo)航菜單。
示例代碼如下:
fromseleniumimportwebdriver
fromselenium.webdriverimportActionChains
importtime
browser=webdriver.Chrome()
browser.get('')
actions=ActionChains(browser)
li_list=browser.find_elements_by_css_selector(".cate_menu_item")
forliinli_list:
actions.move_to_element(li).perform()
time.sleep(1)
exceptExceptionase:
print(e)
browser.close()
使用selenium動(dòng)作鏈的drag_and_drop方法將一個(gè)節(jié)點(diǎn)拖動(dòng)到另外一個(gè)節(jié)點(diǎn)上。
示例代碼如下:
fromseleniumimportwebdriver
fromselenium.webdriverimportActionChains
browser=webdriver.Chrome()
browser.get('/try/try.phpfilename=jqueryui-api-droppable')
browser.switch_to.frame('iframeResult')
source=browser.find_element_by_css_selector('#draggable')
target=browser.find_element_by_css_selector('#droppable')
actions=ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform()
exceptExceptionase:
print(e)
browser.close()
五、執(zhí)行JavaScript代碼
使用selenium的execute_script方法讓京東商城首頁(yè)滾動(dòng)到最低端,然后彈出一個(gè)對(duì)話框。示
例代碼如下:
fromseleniumimportwebdriver
browser=webdriver.Chrome()
browser.get('')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_async_script('alert("已經(jīng)到達(dá)頁(yè)面底端")')
六、獲取節(jié)點(diǎn)信息
使用selenium的API獲取京東商城首頁(yè)HTML代碼中id為navitems-group1的ul節(jié)點(diǎn)的相關(guān)信息以及ul節(jié)點(diǎn)中l(wèi)i子節(jié)點(diǎn)的相關(guān)信息。
示例代碼如下:
fromseleniumimportwebdriver
options=webdriver.ChromeOptions()
options.add_argument('headless')
browser=webdriver.Chrome(chrome_options=options)
#browser=webdriver.PhantomJS('./webdriver/phantomjs')
browser.get('')
ul=browser.find_element_by_id("navitems-group1")
print(ul.text)
print('id','=',ul.id)#內(nèi)部id,不是節(jié)點(diǎn)id屬性值
print('location','=',ul.location)
print('tag_name','=',ul.tag_name)
print('size','=',ul.size)
li_list=ul.find_elements_by_tag_name("li")
forliinli_list:
print(type(li))
#屬性沒找到,返回None
print('',li.text,'','class'))
a=li.find_element_by_tag_name('a')
print('href','=',a.get_attribute('href'))
browser.close()
執(zhí)行結(jié)果如下:
秒殺
優(yōu)惠券
PLUS會(huì)員
品牌閃購(gòu)
id=6bb622fb-df60-4619-a373-b55e44dc27af
location={'x':203,'y':131}
tag_name=ul
size={'height':40,'width':294}
class'selenium.webdriver.remote.webelement.WebElement'
秒殺>
href=/
class'selenium.webdriver.remote.webelement.WebElement'
優(yōu)惠券>
href=/
class'selenium.webdriver.remote.webelement.WebElement'
PLUS會(huì)員>
href=/indexflow_system=appiconflow_entrance=appicon11flow_channel=pc
class'selenium.webdriver.remote.webelement.WebElement'
品牌閃購(gòu)>
href=/
七、管理Cookies
使用seleniumAPI獲取cookie列表,并添加新的cookie,以及刪除所有的cookie。
示例代碼如下:
fromseleniumimportwebdriver
browser=webdriver.Chrome()
browser.get('')
print(browser.get_cookies())
browser.add_cookie({'name':'name',
'value':'jd','domain':''})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())#大部分刪除了,可能還剩下一些
八、改變節(jié)點(diǎn)屬性的值
通過(guò)javascript代碼改變百度搜索按鈕的位置,讓這個(gè)按鈕在多個(gè)位置之間移動(dòng),時(shí)間間隔是2秒。
示例代碼如下:
fromseleniumimportwebdriver
importtime
driver=webdriver.Chrome()
driver.get("")
search_button=driver.find_element_by_id("su")#百度搜索按鈕
#arguments[0]對(duì)應(yīng)的是第一個(gè)參數(shù),可以理解為python里的%s傳參,與之類似
x_positions=[50,90,130,170]
y_positions=[100,120,160,90]
foriinrange(len(x_positions)):
js='''
arguments[0].style.position="absolute";
arguments[0].st
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生宿舍用電管理制度
- 養(yǎng)老院工作人員交接班制度
- 企業(yè)內(nèi)部報(bào)銷與報(bào)銷審批制度
- 公共交通車輛維修保養(yǎng)制度
- 2026年企業(yè)內(nèi)部培訓(xùn)課程團(tuán)隊(duì)協(xié)作與領(lǐng)導(dǎo)力發(fā)展能力測(cè)試題
- 2026年計(jì)算機(jī)編程基礎(chǔ)Python語(yǔ)言編程練習(xí)題
- 2026年餐飲行業(yè)服務(wù)管理筆試模擬題
- 2026年醫(yī)藥物流項(xiàng)目管理與操作手冊(cè)及習(xí)題
- 2026年醫(yī)院網(wǎng)絡(luò)安全管理制度與實(shí)踐試題
- 2026年廚房設(shè)備以舊換新協(xié)議
- 就業(yè)協(xié)議書解約函模板
- 研發(fā)部門員工加班管理細(xì)則
- 鋼結(jié)構(gòu)橋梁施工監(jiān)測(cè)方案
- 2025人教pep版三年級(jí)英語(yǔ)上冊(cè)字帖
- 《5G移動(dòng)通信》課件-項(xiàng)目六 5G網(wǎng)絡(luò)中的人工智能技術(shù)
- 2025江蘇蘇州高新區(qū)獅山商務(wù)創(chuàng)新區(qū)下屬國(guó)有企業(yè)招聘9人筆試題庫(kù)及答案詳解
- 2025-2030中國(guó)城市青年租房行為特征與消費(fèi)偏好調(diào)查報(bào)告
- 教培機(jī)構(gòu)年終工作總結(jié)
- 2025年秋季青島版三年級(jí)數(shù)學(xué)上冊(cè)求比一個(gè)數(shù)的幾倍多(少)幾的數(shù)教學(xué)課件
- 2025年法醫(yī)學(xué)法醫(yī)鑒定技能測(cè)試答案及解析
- 2025泰州中考數(shù)學(xué)試卷及答案
評(píng)論
0/150
提交評(píng)論