Selenium入門(5)--API翻譯(中)

這一章介紹一下selenium的各種介面,分為上中下三章。

5.通過By來定位元素

By是selenium中內置的一個class,在這個class中有各種方法來定位元素

class selenium.webdriver.common.by.BynBases: objectn

列舉一下方法,和find系列方法類似

CLASS_NAME = class namenCSS_SELECTOR = css selectornID = idnLINK_TEXT = link textnNAME = namenPARTIAL_LINK_TEXT = partial link textnTAG_NAME = tag namenXPATH = xpathn

主要應用於一個過濾器,而webdriver的方法是一個定位器。

6.Desired Capabilities

並不確定如何翻譯更為準確。渴望的能力?其實是對於webdriver的性質微調,並不太常用,主要用於模擬手機瀏覽器,以及在某一台帶寬高的伺服器中統一用做selenium的webdriver。

class selenium.webdriver.common.desired_capabilities.DesiredCapabilitiesnnBases: objectn

假設我有一個伺服器在198.0.0.1中打開了一個selenium伺服器(需要使用java -jar selenium-server-standalone-2.x.x.jar打開伺服器),使用方法如下。

from selenium import webdrivernnselenium_grid_url = "http://198.0.0.1:4444/wd/hub"nn# Create a desired capabilities object as a starting point.ncapabilities = DesiredCapabilities.FIREFOX.copy()ncapabilities[platform] = "WINDOWS"ncapabilities[version] = "10"nn# Instantiate an instance of Remote WebDriver with the desired capabilities.ndriver = webdriver.Remote(desired_capabilities=capabilities,n command_executor=selenium_grid_url)n

切記:永遠要使用.copy方法來fock,不然的話本地的改動會影響全局的class。

所有不同的webdriver參數如下,可按自己的需求定製

ANDROID = {platform: ANDROID, browserName: android, version: , javascriptEnabled: True}nCHROME = {platform: ANY, browserName: chrome, version: , javascriptEnabled: True}nEDGE = {platform: WINDOWS, browserName: MicrosoftEdge, version: }nFIREFOX = {acceptInsecureCerts: True, javascriptEnabled: True, platform: ANY, browserName: firefox, version: , marionette: True}nHTMLUNIT = {platform: ANY, browserName: htmlunit, version: }nHTMLUNITWITHJS = {platform: ANY, browserName: htmlunit, version: firefox, javascriptEnabled: True}nINTERNETEXPLORER = {platform: WINDOWS, browserName: internet explorer, version: , javascriptEnabled: True}nIPAD = {platform: MAC, browserName: iPad, version: , javascriptEnabled: True}nIPHONE = {platform: MAC, browserName: iPhone, version: , javascriptEnabled: True}nOPERA = {platform: ANY, browserName: opera, version: , javascriptEnabled: True}nPHANTOMJS = {platform: ANY, browserName: phantomjs, version: , javascriptEnabled: True}nSAFARI = {platform: MAC, browserName: safari, version: , javascriptEnabled: True}n

7.一些實用方法

包含在Utils下。

selenium.webdriver.common.utils.find_connectable_ip(host, port=None)n# 通過host與port名來尋找ip地址,返回是一個ipv4的地址n# 輸入:hostname, portn# 輸出:一個字元串。如果找到了ipv4,返回,如果找到了ipv6,返回,都沒找到,返回空nnselenium.webdriver.common.utils.free_port()nnselenium.webdriver.common.utils.is_connectable(port, host=localhost)n# 確定能否鏈接至某埠nnselenium.webdriver.common.utils.is_url_connectable(port)n# 確定是否能成為一個http鏈接n

8.web元素的操作

web元素指的是find出來的元素。指的注意的是如果方法中是elements的話即使只找到了一個元素也會返回一個list,並不能直接操作。

clear()n# 清除textnclick()n# 點擊nfind_element(by=id, value=None)nfind_element_by_class_name(name)nfind_element_by_css_selector(css_selector)nfind_element_by_id(id_)nfind_element_by_link_text(link_text)nfind_element_by_name(name)nfind_element_by_partial_link_text(link_text)nfind_element_by_tag_name(name)nfind_element_by_xpath(xpath)nfind_elements(by=id, value=None)nfind_elements_by_class_name(name)nfind_elements_by_css_selector(css_selector)nfind_elements_by_id(id_)nfind_elements_by_link_text(link_text)nfind_elements_by_name(name)nfind_elements_by_partial_link_text(link_text)nfind_elements_by_tag_name(name)nfind_elements_by_xpath(xpath)n# 均為查找元素的方法。要注意xpath由於是在找過一次元素的基礎上再找一次元素,因此全局的選擇不應該是//而是.//nget_attribute(name)n# 查找<>中各種屬性,類似class,href之類的nget_property(name)n# 查找property屬性,類似text_lengthnis_displayed()n# 確定已經顯示,對於某些非同步載入有用nis_enabled()n# 確定能使用nis_selected()n# 能被選中nscreenshot(filename)nscreenshot_as_base64nscreenshot_as_pngn# 截屏nsend_keys(*value)n# 傳送值nsubmit()n# 確定nvalue_of_css_property(property_name)n# css_property值nidn# id值nparentn# 父節點nsizentag_namen# tag名ntextn# 內容n

web元素的嵌套操作是相當重要的方法。類似一個目錄下有10個同樣的東西,那麼我們就可以第一步來找到這10個元素,再分別在元素下定位出我們所需要的內容,會更為便捷。

更新進度8/13

下次更新時間預計下周3,謝謝大家的關注

推薦閱讀:

玩轉貼吧
一行正則抓取糗事百科
30行代碼獲取教務網成績並存入Excel
那些年我們寫過的爬蟲

TAG:Python | 爬虫 | 计算机科学 |