Selenium笔记(3)Remote Webdriver

本文集链接:https://www.jianshu.com/nb/25338984

1. 简介

selenium.webdriver.remote.webdriver.WebDriver 这个类其实是所有其他Webdriver的父类,例如Chrome WebdriverFirefox Webdriver都是继承自这个类。这个类中实现了每个Webdriver间相通的方法。


2. 常用方法与属性

  • get(url)

    在当前浏览器会话中访问传入的url地址。

    用法:

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

    关闭浏览器当前窗口。

  • quit()

    退出webdriver并关闭所有窗口。

  • refresh()

    刷新当前页面。

  • title

    获取当前页的标题。

  • page_source

    获取当前页渲染后的源代码。

  • current_url

    获取当前页面的url。

  • window_handles

    获取当前会话中所有窗口的句柄,返回的是一个列表。


3. 查找元素

Webdriver对象中内置了查找节点元素的方法,使用非常方便。

3.1. 单个查找

以下是查找单个元素的方法:

方法 作用
find_element_by_xpath() 通过Xpath查找
find_element_by_class_name() 通过class属性查找
find_element_by_css_selector() 通过css选择器查找
find_element_by_id() 通过id查找
find_element_by_link_text() 通过链接文本查找
find_element_by_name() 通过name属性进行查找
find_element_by_partial_link_text() 通过链接文本的部分匹配查找
find_element_by_tag_name() 通过标签名查找

查找后返回的是一个Webelement对象。

3.2. 多个查找

上面的方法都是将第一个找到的元素进行返回,而将所有匹配的元素进行返回使用的是find_elements_by_*方法。

此方法返回的是一个Webelement对象组成的列表。注:将其中的element加上一个s,则是对应的多个查找方法。

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这个类是专门用来查找元素时传入的参数,这个类中有以下属性:

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)

    给当前会话添加一个cookie。

    • cookie_dict: 一个字典对象,必须要有"name"和"value"两个键,可选的键有:“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获取单个Cookie,没有则返回None。

  • get_cookies()

    获取所有Cookie,返回的是一组字典。

  • delete_all_cookies()

    删除所有Cookies。

  • delete_cookie(name)

    按name删除指定cookie。


5. 获取截屏

  • get_screenshot_as_base64()

    获取当前窗口的截图保存为一个base64编码的字符串。

  • get_screenshot_as_file(filename)

    获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾。如果出现IO错误,则返回False。

    用法:

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

    获取当前窗口的截图保存为一个png格式的二进制字符串。


6. 获取窗口信息

  • get_window_position(windowHandle='current')

    获取当前窗口的x,y坐标。

  • get_window_rect()

    获取当前窗口的x,y坐标和当前窗口的高度和宽度。

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

    获取当前窗口的高度和宽度。


7. 切换框架或窗口

  • switch_to.frame(frame_reference)

    在页面中,如果有iframe这样的页面子框架的话,selenium是无法搜索到子框架frame中的元素,并与之定位的。

    所以如果要操作frame中的元素,则首先要切换到这个frame中。

    首先我们需要使用上面提供的搜索方法find_element_by_*等来找到frame框架,然后传入到切换的方法中。

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

    还有一个方法可以切换回主界面:

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

    这个方法可以让我们在一个浏览器中的窗口中互相切换,这个方法中需要传入目标窗口的句柄,窗口句柄可以通过driver.window_handles等方法来进行获取。

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

8. 执行JS代码

  • execute_async_script(script, *args)

    在当前的window/frame中异步执行JS代码。

    script:要执行的JS代码。

    *args:JS代码执行要传入的参数。

  • execute_script(script, *args)

    在当前的window/frame中同步执行JS代码。

    script:要执行的JS代码。

    *args:JS代码执行要传入的参数。

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,197评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,254评论 3 410
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 173,718评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,801评论 1 305
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,732评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,200评论 1 318
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,389评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,484评论 0 282
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,024评论 1 328
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,013评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,125评论 1 359
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,698评论 5 353
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,407评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,795评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,996评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,724评论 3 384
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,150评论 2 368

推荐阅读更多精彩内容