教你快速上手Selenium爬蟲,萬物皆可爬_第1頁
教你快速上手Selenium爬蟲,萬物皆可爬_第2頁
教你快速上手Selenium爬蟲,萬物皆可爬_第3頁
教你快速上手Selenium爬蟲,萬物皆可爬_第4頁
教你快速上手Selenium爬蟲,萬物皆可爬_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論