




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第教你快速上手Selenium爬蟲,萬物皆可爬目錄一、基本使用二、查找節(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的基本使用步驟:
打開瀏覽器;
獲取瀏覽器頁面的特定內(nèi)容;
控制瀏覽器頁面上的控件,如向一個(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è)置最長等待時(shí)間4秒
wait.until(ec.presence_of_all_elements_located((By.ID,'J_goodsList')))
print(browser.title)#顯示搜索頁面的標(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
國家:inputname="country"p/p
收入:inputp/p
button提交/button
/body
/html
樣式如下圖所示:
python代碼自動(dòng)填充上圖中的表單:
fromseleniumimportwebdriver
frommon.byimportBy
#不支持本地網(wǎng)頁
browser=webdriver.Chrome()
#這里我是用flask自己搭建的一個(gè)服務(wù)訪問該頁面即可打開demo.html
browser.get(':5000/')
input_t=browser.find_element_by_id('name')#通過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')#通過name屬性查找國家input節(jié)點(diǎn)
input_t.send_keys('中國')
#通過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)原來的內(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)頁
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通過模擬瀏覽器單擊動(dòng)作循環(huán)單擊頁面上的6個(gè)按鈕,單擊每個(gè)按鈕后,按鈕下方的div就會(huì)按照按鈕的背景顏色設(shè)置div的背景色。
demo1.html靜態(tài)頁面代碼如下:
!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)單擊頁面上的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)顯示京東商城首頁左側(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方法讓京東商城首頁滾動(dòng)到最低端,然后彈出一個(gè)對話框。示
例代碼如下:
fromseleniumimportwebdriver
browser=webdriver.Chrome()
browser.get('')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_async_script('alert("已經(jīng)到達(dá)頁面底端")')
六、獲取節(jié)點(diǎn)信息
使用selenium的API獲取京東商城首頁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ì)員
品牌閃購
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'
品牌閃購>
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)屬性的值
通過javascript代碼改變百度搜索按鈕的位置,讓這個(gè)按鈕在多個(gè)位置之間移動(dòng),時(shí)間間隔是2秒。
示例代碼如下:
fromseleniumimportwebdriver
importtime
driver=webdriver.Chrome()
driver.get("")
search_button=driver.find_element_by_id("su")#百度搜索按鈕
#arguments[0]對應(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025室內(nèi)裝修施工合同文本
- 建筑信息模型技術(shù)員練習(xí)題庫(附參考答案)
- 發(fā)電機(jī)采購協(xié)議
- 土地流轉(zhuǎn)使用權(quán)轉(zhuǎn)讓與種植計(jì)劃合同
- 浙江國企招聘2025衢州市屬國企春季招聘23人筆試參考題庫附帶答案詳解
- 2025重慶西南證券股份有限公司招聘45人筆試參考題庫附帶答案詳解
- 2025年第一季度廣西興工投資集團(tuán)有限公司招聘21人筆試參考題庫附帶答案詳解
- 2025年安徽九華山旅游發(fā)展股份有限公司招聘66人筆試參考題庫附帶答案詳解
- 2025北京大興區(qū)司法局招聘臨時(shí)輔助用工1人筆試參考題庫附帶答案詳解
- 青職綜合評價(jià)試題及答案
- 海南導(dǎo)游考試面試導(dǎo)游詞
- 建設(shè)單位與施工單位安全生產(chǎn)協(xié)議書 標(biāo)準(zhǔn)版
- 工程開票申請表
- 船舶岸基應(yīng)急預(yù)案
- 6人小品《沒有學(xué)習(xí)的人不傷心》臺(tái)詞完整版
- 企業(yè)零代碼應(yīng)用開發(fā)白皮書-2023.03
- 巴蜀武術(shù)天下奇
- 裝在套子里的人公開課
- 教科版四年級(jí)下冊科學(xué)《植物的生長變化》單元解讀
- 英文電影鑒賞知到章節(jié)答案智慧樹2023年北華大學(xué)
- 2022年03月四川成都市公園城市建設(shè)管理局事業(yè)單位公開招聘54名工作人員筆試題庫含答案解析
評論
0/150
提交評論