亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python Selenium庫(kù)的使用

系統(tǒng) 2019 0

一、什么是Selenium

Selenium是一個(gè)自動(dòng)化測(cè)試工具,對(duì)各種瀏覽器都能很好地支持,包括Chrome、Firefox這些主流瀏覽器。使用它就可以模擬瀏覽器進(jìn)行各種各樣的操作,包括爬取一些網(wǎng)頁(yè)內(nèi)容。當(dāng)你看到瀏覽器自己運(yùn)行并且在網(wǎng)頁(yè)上翻頁(yè)或者跳轉(zhuǎn)的時(shí)候,應(yīng)該會(huì)覺(jué)得很有趣的。
安裝selenium
先安裝好Selenium庫(kù)和對(duì)應(yīng)瀏覽器的WebDriver驅(qū)動(dòng),比如我用的是Chrome,則相對(duì)應(yīng)安裝的是ChromeDriver。
1.安裝selenium # 打開(kāi)命令控制符執(zhí)行 pip install selenium
2.我的Google Chrome 已是最新版本版本 74.0.3729.108(正式版本) (64 位)
安裝三大瀏覽器驅(qū)動(dòng)driver
1.chromedriver 下載地址:http://chromedriver.storage.googleapis.com/index.html?path=74.0.3729.6/
2.Firefox的驅(qū)動(dòng)geckodriver 下載地址:https://github.com/mozilla/geckodriver/releases/
3.IE的驅(qū)動(dòng)IEdriver 下載地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/
注意:64位向下兼容,直接下載32位的就可以啦,親測(cè)可用。
chromedriver_win32.zip
D:\Python\python\Scripts
.粘貼chromedriver.exe到文件d:\Python37\Scripts路徑下。

如果Chrome問(wèn)題閃退 ,不兼容問(wèn)題!

二、selenium基本使用

用python寫(xiě)爬蟲(chóng)的時(shí)候,主要用的是selenium的Webdriver,我們可以通過(guò)下面的方式先看看Selenium.Webdriver支持哪些瀏覽器
聲明瀏覽器對(duì)象:

            
              from selenium import webdriver
from time import sleep

driver = webdriver.Chrome() 			 # 打開(kāi)Google瀏覽器
#driver= webdriver.Firefox() 
#driver= webdriver.Ie()
driver.get('http://www.baidu.com') 	 # 打開(kāi) 網(wǎng)址
#driver.get(r"C:\desktop\text.html")    	# 打開(kāi)本地 html頁(yè)面
driver.maximize_window()  #將瀏覽器最大化顯示
driver.set_window_size(480, 800) #設(shè)置瀏覽器寬480、高800顯示
# 移動(dòng)瀏覽器大小觀看展示
driver.set_window_size(width=500, height=500, windowHandle="current")
driver.set_window_position(x=1000, y=100, windowHandle='current')
# 獲取當(dāng)前頁(yè)面的源碼并斷言
pageSource = driver.page_source
sleep(2)
try:
    assert u"百度一下,你就不知道" in pageSource, "頁(yè)面源碼中未找到'百度一下,你就知道'關(guān)鍵字"
    # 斷言語(yǔ)句和 if 分支有點(diǎn)類似,它用于對(duì)一個(gè) bool 表達(dá)式進(jìn)行斷言,如果該 bool 表達(dá)式為 True,該程序可以繼續(xù)向下執(zhí)行;否則程序會(huì)引發(fā) AssertionError 錯(cuò)誤。
except:
    print("源碼這里故意斷言錯(cuò)誤", "\n")
sleep(2)
try:
	title = driver.title      			    # 獲取打開(kāi)網(wǎng)址 的名字 
	url = driver.current_url 	 	# 獲取打開(kāi)網(wǎng)址的url
	driver.page_sourse  #打印出頁(yè)面源代碼
	driver.forward()  #瀏覽器前進(jìn)
	driver.back()  #瀏覽器后退
except:
  	#print("Oops!  That was no valid number.  Try again   ")
  	driver.close()     #關(guān)閉這個(gè)頁(yè)面
	# driver.quit()     #退出瀏覽器

            
          

三 基本使用

            
              from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤(pán)按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁(yè)面加載某些元素
driver=webdriver.Chrome()
try:
    driver.get('https://www.baidu.com')
    input_tag=driver.find_element_by_id('kw')
    input_tag.send_keys('美女') #python2中輸入中文錯(cuò)誤,字符串前加個(gè)u
    input_tag.send_keys(Keys.ENTER) #輸入回車
    wait=WebDriverWait(driver,10)
    wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等到id為content_left的元素加載完畢,最多等10秒
    print(driver.page_source)  # 打印出頁(yè)面源代碼
    print(driver.current_url)  # 獲取打開(kāi)網(wǎng)址的url
    print(driver.get_cookies())   #cookies
finally:
    driver.close()

            
          

四 選擇器

一 瀏覽器操作
            
              driver.current_url #用于獲得當(dāng)前頁(yè)面的URL
driver.title #用于獲取當(dāng)前頁(yè)面的標(biāo)題
driver.page_source #用于獲取頁(yè)面html源代碼
driver.port #用于獲取瀏覽器的端口
driver.capabilities['version']  #打印瀏覽器version的值

#瀏覽器:
driver.get(url):#瀏覽器加載url
driver.back() #瀏覽器后退
driver.forward() #瀏覽器前進(jìn)
driver.refresh() #瀏覽器刷新(點(diǎn)擊刷新按鈕)
driver.set_page_load_timeout(5) #設(shè)置頁(yè)面加載時(shí)間,如果超時(shí)會(huì)跑異常
driver.implicitly_wait(秒) #隱式等待,通過(guò)一定的時(shí)長(zhǎng)等待頁(yè)面上某一元素加載完成。
#若提前定位到元素,則繼續(xù)執(zhí)行。等待10s若超過(guò)時(shí)間未加載出,則拋出NoSuchElementException異常。


#執(zhí)行js:
driver.execute_script(js) #調(diào)用js

            
          

二 窗口和彈框操作

            
              #窗口:
driver.current_window_handle  #用于獲取當(dāng)前窗口句柄
driver.window_handles  #用于獲取所有窗口句柄

driver.maximize_window()  #將瀏覽器最大化顯示
driver.set_window_size(480, 800)  #設(shè)置瀏覽器寬480、高800顯示
driver.get_window_size()  #獲取當(dāng)前窗口的長(zhǎng)和寬
driver.get_window_position()  #獲取當(dāng)前窗口坐標(biāo)
driver.set_window_position(300,200)  #設(shè)置當(dāng)前窗口坐標(biāo)
driver.get_screenshot_as_file(filename)  #截取當(dāng)前窗口
#實(shí)例:driver.get_screenshot_as_file('D:/selenium/image/baidu.jpg')

driver.close()  #關(guān)閉當(dāng)前窗口,或最后打開(kāi)的窗口
driver.quit()  #關(guān)閉所有關(guān)聯(lián)窗口,并且安全關(guān)閉session

#窗口切換:
driver.switch_to_frame(id或name屬性值)#切換到新表單(同一窗口)。若無(wú)id或?qū)傩灾担上韧ㄟ^(guò)xpath定位到iframe,再將值傳給switch_to_frame()
driver.switch_to.parent_content()#跳出當(dāng)前一級(jí)表單。該方法默認(rèn)對(duì)應(yīng)于離它最近的switch_to.frame()方法
driver.switch_to.default_content() #跳回最外層的頁(yè)面 
driver.switch_to_window(窗口句柄) #切換到新窗口 
driver.switch_to.window(窗口句柄) #切換到新窗口 

#彈框切換: 
driver.switch_to_alert() #警告框處理。處理JavaScript所生成的alert,confirm,prompt
driver.switch_to.alert() #警告框處理

            
          

三 cookies 操作

            
              driver.get_cookies()   #獲取當(dāng)前會(huì)話所有cookie信息
driver.get_cookie(cookie_name)  #返回字典的key為“cookie_name”的cookie信息。
#實(shí)例:driver.get_cookie("NET_SessionId")

driver.add_cookie(cookie_dict)   #添加cookie。“cookie_dict”指字典對(duì)象,必須有name和value值
driver.delete_cookie(name,optionsString)  #刪除cookie信息
driver.delete_all_cookies()  #刪除所有cookie信息

            
          

四 頁(yè)面元素操作

            
              # 屬性:
element.size  #獲取元素的尺寸。
element.text   #獲取元素的文本。
element.tag_name   #獲取標(biāo)簽名稱

element.clear()  #用于清除輸入框的默認(rèn)內(nèi)容
element.send_keys("xx")  #用于在一個(gè)輸入框里輸入 xx 內(nèi)容
element.click()  #用于單擊一個(gè)按鈕
element.submit()  #提交表單
element.size  #返回元素的尺寸
element.text  #獲取元素文本
element.get_attribute('value')
#返回元素的屬性值,可以是id、name、type或元素?fù)碛械钠渌我鈱傩?#如果是input的,可以通過(guò)獲取value值獲得當(dāng)前輸入的值

element.is_displayed ()
#返回元素的結(jié)果是否可見(jiàn),返回結(jié)果為T(mén)rue或False

element.is_enabled()  #判斷元素是否可用
element.is_selected()   #返回單選按鈕、復(fù)選框元素結(jié)果是否被選中(True 或 False)
element.value_of_css_property(height)  #獲取元素css樣式屬性

            
          

五 鼠標(biāo)事件

            
              #引入ActionChains類
from selenium.webdriver.common.action_chains import ActionChains

mouse =driver.find_element_by_xpath("xx") #定位鼠標(biāo)元素

#對(duì)定位到的元素執(zhí)行鼠標(biāo)操作
ActionChains(driver).context_click(mouse).perform() #鼠標(biāo)右鍵操作
ActionChains(driver).double_click(mouse).perform() #鼠標(biāo)雙擊操作
ActionChains(driver).move_to_element(mouse).perform() #鼠標(biāo)移動(dòng)到上面的操作
ActionChains(driver).click_and_hold(mouse).perform() #鼠標(biāo)左鍵按下的操作
ActionChains(driver).release(mouse).perform()  #鼠標(biāo)釋放

#鼠標(biāo)拖拽
element = driver.find_element_by_name("xxx")  #定位元素的原位置
target = driver.find_element_by_name("xxx") #定位元素要移動(dòng)到的目標(biāo)位置
ActionChains(driver).drag_and_drop(element, target).perform() #執(zhí)行元素的移動(dòng)操作
復(fù)制代碼

            
          

六 鍵盤(pán)事件

            
              #引入Keys類包
from selenium.webdriver.common.keys import Keys

element.send_keys(Keys.BACK_SPACE)  #刪除鍵(BackSpace)
element.send_keys(Keys.SPACE)  #空格鍵(Space)
element.send_keys(Keys.TAB)  #制表鍵(Tab)
element.send_keys(Keys.ESCAPE)  #回退鍵(Esc)
element.send_keys(Keys.ENTER)  #回車鍵(Enter)
element.send_keys(Keys.CONTROL,'a')  #全選(Ctrl+A)
element.send_keys(Keys.CONTROL,'c')  #復(fù)制(Ctrl+C)
element.send_keys(Keys.CONTROL,'x')  #剪切(Ctrl+X)
element.send_keys(Keys.CONTROL,'v')  #粘貼(Ctrl+V)
element.send_keys(Keys.F12)   #鍵盤(pán)F12

#輸入空格鍵+“python”
element.send_keys(Keys.SPACE)
element.send_keys("python")

            
          

案例

            
              from selenium import webdriver
from selenium.webdriver.common.keys import Keys  # 模擬鍵盤(pán)操作
from time import sleep

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)
print(input.location)
print(input.tag_name)
print(input.size)
print(input.text)
browser.find_element_by_id('zu-top-add-question').click()  # 點(diǎn)擊進(jìn)入
# browser.find_element_by_class_name('zu-top-add-question').click()  # 點(diǎn)擊進(jìn)入

#from selenium import webdriver
#browser = webdriver.Chrome()
browser.get("http://www.taobao.com")
# 
              
              
input_first = browser.find_element_by_id("q")
input_second = browser.find_element_by_css_selector("#q")
input_third = browser.find_element_by_xpath('//*[@id="q"]')    # //*[@id="q"]

input_third1 = browser.find_element_by_xpath('/html/body/div[3]/div/h2').text   # 獲取文字內(nèi)容
input_third2 = browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').text   # 獲取文字內(nèi)容

browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()  # 點(diǎn)擊進(jìn)入

print(input_first)
print(input_second)
print(input_third)
print(input_third1)
print(input_third2)
# browser.close()
element = browser.find_element_by_tag_name('body')
element.send_keys(Keys.CONTROL,'a')  #全選(Ctrl+A)
element.send_keys(Keys.CONTROL,'c')  #復(fù)制(Ctrl+C)

browser.get("http://www.taobao.com")
# browser.find_element_by_id("q").send_keys(Keys.CONTROL, 'v')    #粘貼(Ctrl+V)
browser.find_element_by_id("q").send_keys(input_third1)    #粘貼(Ctrl+V)
# element.send_keys(Keys.CONTROL,'v')  #粘貼(Ctrl+V)
sleep(3)
# element.send_keys(Keys.CONTROL,'x')  #剪切(Ctrl+X)
browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()  # 點(diǎn)擊進(jìn)入

#element.send_keys(Keys.BACK_SPACE)  #刪除鍵(BackSpace)
#element.send_keys(Keys.SPACE)  #空格鍵(Space)
#element.send_keys(Keys.TAB)  #制表鍵(Tab)
#element.send_keys(Keys.ESCAPE)  #回退鍵(Esc)
#element.send_keys(Keys.ENTER)  #回車鍵(Enter)
#element.send_keys(Keys.F12)   #鍵盤(pán)F12



            
          

定位元素的8種方式
參考:selenium元素定位

            
              定位一個(gè)元素	定位多個(gè)元素	含義
find_element_by_id	find_elements_by_id	通過(guò)元素id定位
find_element_by_name	find_elements_by_name	通過(guò)元素name定位
find_element_by_xpath	find_elements_by_xpath	通過(guò)xpath表達(dá)式定位
find_element_by_link_text	find_elements_by_link_tex	通過(guò)完整超鏈接定位
find_element_by_partial_link_text	find_elements_by_partial_link_text	通過(guò)部分鏈接定位
find_element_by_tag_name	find_elements_by_tag_name	通過(guò)標(biāo)簽定位
find_element_by_class_name	find_elements_by_class_name	通過(guò)類名進(jìn)行定位
find_elements_by_css_selector	find_elements_by_css_selector	通過(guò)css選擇器進(jìn)行定位
3.實(shí)例演示
假如我們有一個(gè)Web頁(yè)面,通過(guò)前端工具(如,F(xiàn)irebug)查看到一個(gè)元素的屬性是這樣的。


  
  
    
              
              
                新聞
              
              
                hao123
              
              

通過(guò)link text定位:
dr.find_element_by_link_text("新聞")
dr.find_element_by_link_text("hao123")

通過(guò)partial link text定位:
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲国产精品欧美日韩一区二区 | 精品一精品国产一级毛片 | 精品1区2区3区 | 国产精品久久久久毛片真精品 | 成人国产欧美精品一区二区 | 欧美www视频 | 中文字幕日韩一区二区三区不 | 波多野结衣xxxx性精品 | 精品午夜寂寞影院在线观看 | 亚洲乱码中文字幕久久 | 久久看片 | 久久精品亚洲欧美va | 日日射天天干 | 国产一级αv片免费观看 | 午夜激情男女 | 交专区videossex另类 | 精品久久国产 | 久久精品国产乱子伦多人 | 91精品国产综合久久婷婷 | 网友自拍视频悠悠在线 | 国产大片91精品免费观看不卡 | 一级白嫩美女毛片免费 | 精品亚洲性xxx久久久 | 免费黄片毛片 | 久久久久久日本一区99 | 中国日韩欧美中文日韩欧美色 | 大美女久久久久久j久久 | 国产区在线观看 | 亚洲精品午夜级久久久久 | 欧美日韩中文字幕一区二区高清 | 精品久久久久久中文字幕网 | 成人在线毛片 | 午夜日韩 | 日本在线 | 中文 | 超级乱淫视频aⅴ播放视频 超级乱淫视频播放日韩 | 久久精品国产99国产精品澳门 | 黑丝毛片 | 国产精品第8页 | 一级a俄罗斯毛片免费 | 狠狠色丁香婷婷综合最新地址 | 成人午夜视频在线观看 |