欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python Selenium庫的使用

系統(tǒng) 1855 0

一、什么是Selenium

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

如果Chrome問題閃退 ,不兼容問題!

二、selenium基本使用

用python寫爬蟲的時候,主要用的是selenium的Webdriver,我們可以通過下面的方式先看看Selenium.Webdriver支持哪些瀏覽器
聲明瀏覽器對象:

            
              from selenium import webdriver
from time import sleep

driver = webdriver.Chrome() 			 # 打開Google瀏覽器
#driver= webdriver.Firefox() 
#driver= webdriver.Ie()
driver.get('http://www.baidu.com') 	 # 打開 網(wǎng)址
#driver.get(r"C:\desktop\text.html")    	# 打開本地 html頁面
driver.maximize_window()  #將瀏覽器最大化顯示
driver.set_window_size(480, 800) #設置瀏覽器寬480、高800顯示
# 移動瀏覽器大小觀看展示
driver.set_window_size(width=500, height=500, windowHandle="current")
driver.set_window_position(x=1000, y=100, windowHandle='current')
# 獲取當前頁面的源碼并斷言
pageSource = driver.page_source
sleep(2)
try:
    assert u"百度一下,你就不知道" in pageSource, "頁面源碼中未找到'百度一下,你就知道'關鍵字"
    # 斷言語句和 if 分支有點類似,它用于對一個 bool 表達式進行斷言,如果該 bool 表達式為 True,該程序可以繼續(xù)向下執(zhí)行;否則程序會引發(fā) AssertionError 錯誤。
except:
    print("源碼這里故意斷言錯誤", "\n")
sleep(2)
try:
	title = driver.title      			    # 獲取打開網(wǎng)址 的名字 
	url = driver.current_url 	 	# 獲取打開網(wǎng)址的url
	driver.page_sourse  #打印出頁面源代碼
	driver.forward()  #瀏覽器前進
	driver.back()  #瀏覽器后退
except:
  	#print("Oops!  That was no valid number.  Try again   ")
  	driver.close()     #關閉這個頁面
	# 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 #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素
driver=webdriver.Chrome()
try:
    driver.get('https://www.baidu.com')
    input_tag=driver.find_element_by_id('kw')
    input_tag.send_keys('美女') #python2中輸入中文錯誤,字符串前加個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)  # 打印出頁面源代碼
    print(driver.current_url)  # 獲取打開網(wǎng)址的url
    print(driver.get_cookies())   #cookies
finally:
    driver.close()

            
          

四 選擇器

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

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


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

            
          

二 窗口和彈框操作

            
              #窗口:
driver.current_window_handle  #用于獲取當前窗口句柄
driver.window_handles  #用于獲取所有窗口句柄

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

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

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

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

            
          

三 cookies 操作

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

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

            
          

四 頁面元素操作

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

element.clear()  #用于清除輸入框的默認內(nèi)容
element.send_keys("xx")  #用于在一個輸入框里輸入 xx 內(nèi)容
element.click()  #用于單擊一個按鈕
element.submit()  #提交表單
element.size  #返回元素的尺寸
element.text  #獲取元素文本
element.get_attribute('value')
#返回元素的屬性值,可以是id、name、type或元素擁有的其它任意屬性
#如果是input的,可以通過獲取value值獲得當前輸入的值

element.is_displayed ()
#返回元素的結(jié)果是否可見,返回結(jié)果為True或False

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

            
          

五 鼠標事件

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

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

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

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

            
          

六 鍵盤事件

            
              #引入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')  #復制(Ctrl+C)
element.send_keys(Keys.CONTROL,'x')  #剪切(Ctrl+X)
element.send_keys(Keys.CONTROL,'v')  #粘貼(Ctrl+V)
element.send_keys(Keys.F12)   #鍵盤F12

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

            
          

案例

            
              from selenium import webdriver
from selenium.webdriver.common.keys import Keys  # 模擬鍵盤操作
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()  # 點擊進入
# browser.find_element_by_class_name('zu-top-add-question').click()  # 點擊進入

#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()  # 點擊進入

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')  #復制(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()  # 點擊進入

#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)   #鍵盤F12



            
          

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

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


  
  
    
              
              
                新聞
              
              
                hao123
              
              

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

通過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")

            
          

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美亚洲韩国国产综合五月天 | 日韩欧美精品一区 | 日本黄视色视频在线观看 | 91电影 | 综合精品在线 | 老司机午夜性大片 | avbobo在线 | 国产大毛片 | 手机三级电影 | 国模无水印一区二区三区 | 欧美a站| 免费在线一区二区 | 亚洲欧美精品综合中文字幕 | 521色香蕉网站在线观看 | 久久一区二区三区不卡 | 排球少年第四季樱花动漫 | 性视频亚洲 | 色欧美片视频在线观看 | 久久成人免费网 | 黑人精品欧美一区二区蜜桃 | 一区二区高清视频 | 色网站综合 | 日韩欧美视频一区二区三区 | 91久久国产露脸精品免费 | 在线视频综合视频免费观看 | 婷婷色基地 | 亚洲精品美女久久久 | 毛片入口 | 奇米色吧 | 国产精品亚洲精品日韩已方 | 日韩中文一区二区三区 | 国产高清在线精品一区免费97 | 日本欧美国产精品第一页久久 | 精品国产91亚洲一区二区三区www | 日产精品乱码卡一卡2卡三 久久99精品久久久久久综合 | 久久com | 亚洲一区国产视频 | 欧美片第一页 | 日韩一区二区在线视频 | 亚洲欧洲精品成人久久曰影片 | 国产婷婷 |