python-selenium模塊簡單使用


Selenium-Webdriver

Intro:

  Selenium是元素se(硒)。這個Selenium(以下簡稱Se)最開始只是一個自動化測試的項目,然后逐漸獨立出來,並演化出了很多部分:Selenium IDE、Selenium Client API、Selenium Webdriver、Selenium Remote ControlSelenium Grid. Se對firefox支持較為友好!webdriver對firefox做了原生支持。並且Selenium IDE是firefox上的一個插件。可惜,Firefox更新了Quantum(57),大改了內核。目前Selenium IDE還是處在不適合當前版本的狀態。

具體詳見:https://www.cnblogs.com/yogayan/p/6710119.html

  

一、安裝

  這里安裝的就是selenium Client API

  python: pip install selenium

  配合瀏覽器驅動:

  chromedriver  歡迎大家翻牆下載:https://sites.google.com/a/chromium.org/chromedriver/downloads。然后找個環境路徑存一下就可以調用了。

  IEdriver      github下載:https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver 。 同樣環境路徑保存。

          注意:IE玩家把internet選項-安全- 四個選項的啟動保護模式都關掉!

       PhantomJS     直接解壓,把bin目錄放在環境路徑中

  Opera以及geckodriver試了一下,對最新的opera和firefox都不怎么好使。當然可以下載較低的版本使用。(所以以下所有測試都選擇了IE9)

 

二、基本使用

2.1 啟動瀏覽器

from selenium import webdriver
driver=webdriver.Ie()   #或者webdriver.Chrome()
driver.get('https://www.baidu.com')  
driver.page_source    #拿到所有html內容,注意這里可能顯示不全,因為網速跟不上程序嘛
driver.close()    #關閉瀏覽器

 

 2.2 常用接口

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  #這個是標注狀態的
from selenium.webdriver.support.wait import WebDriverWait #這個是等待頁面加載某些元素

 

2.3 選擇器

     1、find_element_by_id 按照id 查找  2、find_element_by_link_text  按照里面的文本查找,比如查找<h1>好呀</h1>find_element_by_link_text("好呀")  3、find_element_by_partial_link_text 按照文本的部分模糊查找,比如查找<h1>好呀</h1>find_element_by_link_text("好")  4、find_element_by_tag_name    按照標簽名  5、find_element_by_class_name    按照類名  6、find_element_by_name        按照name屬性查找  7、find_element_by_css_selector    css選擇器的方式查找  8、find_element_by_xpath/find_elements_by_xpath       比較神奇的查找方式
   9、所有方式均可以用find_element(By.ID,"lala")這種形式替代
   p.s. 一些方法取到的是元素集合,用索引或者for循環取單獨的值。

#顧名思義find_element_by_xpath 就是找一個元素,elements就是找很多元素,返回集合。以下不再討論,只討論elements的情況。

########## 關鍵符號://   與 / ##################
# / 代表從第一層找   //表示在子子孫孫中找。如果//放在開始就是在整個文檔中找
find_element_by_xpath("/html")  #如果是一個斜杠就只能寫html標簽了。
find_elements_by_xpath("//h1")  #找到所有的h1標簽
find_elements_by_xpaht("//div//h1/a")   #在整個文檔中找div,然后找h1標簽,然后在子標簽中找a標簽


###########索引#############################
find_elements_by_xpath("//a[1]") #取第一個a標簽


##########按照屬性查找#########################
find_elements_by_xpath("//a[@href="image5.html"])  #href是image5.html的a標簽
find_elements_by_xpath(''//a[contains(@href,"image5")]'')  #模糊查找
find_element_by_xpath("//*[@name='continue'][@type='button']") #查看屬性name為continue且屬性type為button的所有標簽
find_element_by_xpath('//a[img/@src="image3_thumb.jpg"]')  #找到子標簽img的src屬性為image3_thumb.jpg的a標簽
xpath那點事

 

2.4 屬性獲取

標簽屬性: tag.get_attribute('class')

其他屬性: tag.location    >>> 拿到x,y坐標位置

      tag.size     >>> 拿到元素大小(px)

      tag.tagname  >>> 拿到元素名

      tag.id      >>> 元素id

 
        

 

三、等待和交互

 3.1 等待

   1. implicit wait : 在browser.get('xxx')前就設置,針對所有元素有效

browser=webdriver.Ie()
browser.implicitly_wait(10)  #10為timeout時間,超過就不等

 

 

   2. explicit wait: 在browser.get('xxx')之后設置,只針對某個元素有效

 
#顯式等待:顯式地等待某個ID為content元素被加載
wait=WebDriverWait(browser,10)  #broswer為瀏覽器對象,10位timeout時間
wait.until(expected_conditions.presence_of_element_located((By.ID,'content')))   #終於用到expected_conditions這個對象啦
 
        

 

3.2 input操作

input_tag=browser.find_element_by_id('kw')
input_tag.clear() #清空輸入框
input_tag.send_keys('百度')
input_tag.send_keys(Keys.ENTER) #輸入回車

 

3.3 鼠標操作

#click
tag.click() 


#自動拖拽
actions=ActionChains(browser)   #一個動作對象
actions.drag_and_drop(tag_from,tag_to)  #tag_from是被拖拽對象,tag_to是目標所在元素
actions.perform()  #action必須有這個perform()。

#可以連着ActionChains(driver).drag_and_drop(tag_from,tag_to).actions.perform()


#more humanlike !
ActionChains(browser).click_and_hold(sourse).perform()  #點擊然后hold住
ActionChains(browser).move_by_offset(xoffset=2,yoffset=0).perform() #移動
ActionChains(browser).release().perform() #松手

 

3.4 霸王硬上弓(JS)

browser.execute_script('alert("hello world")')  #嘗試在python里寫js代碼

 

 3.5 iframe

存在iframe的html中,在父frame里是無法直接查看到子frame的元素的。所以需要切換。
利用browser.switch_to.frame('iframeResult') 切換到id為iframeResult的frame。調皮的孩子就問了,如果iframe沒有id怎么辦?
利用switch_to.parent_frame()再切回來

四、其他

4.1 瀏覽器選項卡操作

  browser.window_handles 就能獲取所有選項卡對象
  browser.switch_to_window(browser.window_handles[1]) 切換選項卡
  至於打開一個新的選項卡:可以交給js window.open

4.2 異常處理

  from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException

4.3 前進后退

  browser.forward()   前進

  browser.back()    后退

 

4.4 cookies

  browser.get_cookies()  

  browser.set_cookie({"key":"value","key2":"value2"})   #設置cookies(不會人工智能的話,只能靠這個了翻過驗證碼了)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM