Selenium筆記(3)Remote Webdriver

本文集鏈接:http://www.itdecent.cn/nb/25338984

1. 簡(jiǎn)介

selenium.webdriver.remote.webdriver.WebDriver 這個(gè)類其實(shí)是所有其他Webdriver的父類,例如Chrome WebdriverFirefox Webdriver都是繼承自這個(gè)類。這個(gè)類中實(shí)現(xiàn)了每個(gè)Webdriver間相通的方法。


2. 常用方法與屬性

  • get(url)

    在當(dāng)前瀏覽器會(huì)話中訪問傳入的url地址。

    用法:

    driver.get('https://www.baidu.com')
    
  • close()

    關(guān)閉瀏覽器當(dāng)前窗口。

  • quit()

    退出webdriver并關(guān)閉所有窗口。

  • refresh()

    刷新當(dāng)前頁(yè)面。

  • title

    獲取當(dāng)前頁(yè)的標(biāo)題。

  • page_source

    獲取當(dāng)前頁(yè)渲染后的源代碼。

  • current_url

    獲取當(dāng)前頁(yè)面的url。

  • window_handles

    獲取當(dāng)前會(huì)話中所有窗口的句柄,返回的是一個(gè)列表。


3. 查找元素

Webdriver對(duì)象中內(nèi)置了查找節(jié)點(diǎn)元素的方法,使用非常方便。

3.1. 單個(gè)查找

以下是查找單個(gè)元素的方法:

方法 作用
find_element_by_xpath() 通過(guò)Xpath查找
find_element_by_class_name() 通過(guò)class屬性查找
find_element_by_css_selector() 通過(guò)css選擇器查找
find_element_by_id() 通過(guò)id查找
find_element_by_link_text() 通過(guò)鏈接文本查找
find_element_by_name() 通過(guò)name屬性進(jìn)行查找
find_element_by_partial_link_text() 通過(guò)鏈接文本的部分匹配查找
find_element_by_tag_name() 通過(guò)標(biāo)簽名查找

查找后返回的是一個(gè)Webelement對(duì)象。

3.2. 多個(gè)查找

上面的方法都是將第一個(gè)找到的元素進(jìn)行返回,而將所有匹配的元素進(jìn)行返回使用的是find_elements_by_*方法。

此方法返回的是一個(gè)Webelement對(duì)象組成的列表。注:將其中的element加上一個(gè)s,則是對(duì)應(yīng)的多個(gè)查找方法。

3.3. 私有方法

除了以上的多種查找方式,還有兩種私有方法find_element()find_elements()可以使用:

例子:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

By這個(gè)類是專門用來(lái)查找元素時(shí)傳入的參數(shù),這個(gè)類中有以下屬性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

4. 操作Cookie

  • add_cookie(cookie_dict)

    給當(dāng)前會(huì)話添加一個(gè)cookie。

    • cookie_dict: 一個(gè)字典對(duì)象,必須要有"name"和"value"兩個(gè)鍵,可選的鍵有:“path”, “domain”, “secure”, “expiry” 。

    • 用法:

      driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’})
      driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’})
      driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})
      
  • get_cookie(name)

    按name獲取單個(gè)Cookie,沒有則返回None。

  • get_cookies()

    獲取所有Cookie,返回的是一組字典。

  • delete_all_cookies()?

    刪除所有Cookies。

  • delete_cookie(name)

    按name刪除指定cookie。


5. 獲取截屏

  • get_screenshot_as_base64()

    獲取當(dāng)前窗口的截圖保存為一個(gè)base64編碼的字符串。

  • get_screenshot_as_file(filename)

    獲取當(dāng)前窗口的截圖保存為一個(gè)png格式的圖片,filename參數(shù)為圖片的保存地址,最后應(yīng)該以.png結(jié)尾。如果出現(xiàn)IO錯(cuò)誤,則返回False。

    用法:

    driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
    
  • get_screenshot_as_png()

    獲取當(dāng)前窗口的截圖保存為一個(gè)png格式的二進(jìn)制字符串。


6. 獲取窗口信息

  • get_window_position(windowHandle='current')

    獲取當(dāng)前窗口的x,y坐標(biāo)。

  • get_window_rect()

    獲取當(dāng)前窗口的x,y坐標(biāo)和當(dāng)前窗口的高度和寬度。

    In [1]: driver.get_window_rect()
    Out[1]: {'height': 600, 'width': 800, 'x': 0, 'y': 200}
    
  • get_window_size(windowHandle='current')

    獲取當(dāng)前窗口的高度和寬度。


7. 切換框架或窗口

  • switch_to.frame(frame_reference)

    在頁(yè)面中,如果有iframe這樣的頁(yè)面子框架的話,selenium是無(wú)法搜索到子框架frame中的元素,并與之定位的。

    所以如果要操作frame中的元素,則首先要切換到這個(gè)frame中。

    首先我們需要使用上面提供的搜索方法find_element_by_*等來(lái)找到frame框架,然后傳入到切換的方法中。

    frame = driver.find_element_by_tag_name("iframe")
    driver.switch_to.frame(frame)
    

    還有一個(gè)方法可以切換回主界面:

    driver.switch_to.default_content()
    
  • switch_to.window(window_name)

    這個(gè)方法可以讓我們?cè)谝粋€(gè)瀏覽器中的窗口中互相切換,這個(gè)方法中需要傳入目標(biāo)窗口的句柄,窗口句柄可以通過(guò)driver.window_handles等方法來(lái)進(jìn)行獲取。

    windows = driver.window_handles
    # 切換到最新打開的窗口中
    switch_to.window(windows[-1])
    

8. 執(zhí)行JS代碼

  • execute_async_script(script, *args)

    在當(dāng)前的window/frame中異步執(zhí)行JS代碼。

    script:要執(zhí)行的JS代碼。

    *args:JS代碼執(zhí)行要傳入的參數(shù)。

  • execute_script(script, *args)

    在當(dāng)前的window/frame中同步執(zhí)行JS代碼。

    script:要執(zhí)行的JS代碼。

    *args:JS代碼執(zhí)行要傳入的參數(shù)。

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容