Selenium筆記(3)Remote Webdriver

本文集鏈接:http://www.reibang.com/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ì)話中訪問(wèn)傳入的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è)類是專門(mén)用來(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雨席,沒(méi)有則返回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
    # 切換到最新打開(kāi)的窗口中
    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)系作者
  • 序言:七十年代末涝滴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胶台,更是在濱河造成了極大的恐慌歼疮,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈唬,死亡現(xiàn)場(chǎng)離奇詭異韩脏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铸磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)赡矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人阅仔,你說(shuō)我怎么就攤上這事吹散。” “怎么了八酒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵空民,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)界轩,這世上最難降的妖魔是什么画饥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮浊猾,結(jié)果婚禮上抖甘,老公的妹妹穿的比我還像新娘。我一直安慰自己葫慎,他們只是感情好衔彻,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著幅疼,像睡著了一般米奸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爽篷,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天悴晰,我揣著相機(jī)與錄音,去河邊找鬼逐工。 笑死铡溪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泪喊。 我是一名探鬼主播棕硫,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼袒啼!你這毒婦竟也來(lái)了哈扮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚓再,失蹤者是張志新(化名)和其女友劉穎滑肉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體摘仅,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靶庙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娃属。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片六荒。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矾端,靈堂內(nèi)的尸體忽然破棺而出掏击,到底是詐尸還是另有隱情,我是刑警寧澤秩铆,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布砚亭,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钠惩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一族阅、第九天 我趴在偏房一處隱蔽的房頂上張望篓跛。 院中可真熱鬧,春花似錦坦刀、人聲如沸愧沟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沐寺。三九已至,卻和暖如春盖奈,著一層夾襖步出監(jiān)牢的瞬間混坞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工钢坦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留究孕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓爹凹,卻偏偏與公主長(zhǎng)得像厨诸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禾酱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容