• selenium简单常见操作(部分WebdriverAPI)


    定位元素方式

    id 定位

    id是页面元素的属性,我们最常用元素定位方式,但是不是所有的元素都有id的。如果一个元素有id属性,那么一般在整个页面是唯一的。所以我们一般可以用id来唯一的定位到这个元素

    这里浅浅举一个百度的例子如下图所示:
    在这里插入图片描述

    代码示例:

    # send_keys("selenium")是在百度的输入框自动填入selenium
    browser.find_element_by_id("kw").send_keys("selenium")
    
    • 1
    • 2

    name 定位

    这个东西不一定全局唯一,name是可以重名的,所以一般不建议用,确定唯一的话也可以用
    在这里插入图片描述
    代码示例:

    #通过name 方式定位 
    browser.find_element_by_name("wd").send_keys("selenium")
    
    • 1
    • 2

    tag name 定位

    这个东西不一定全局唯一,确定唯一的话也可以用
    在这里插入图片描述

    代码示例:

    #通过tag name 方式定位 
    browser.find_element_by_tag_name("input").send_keys("selenium")
    #不能成功,因为 input太多了不唯一。
    
    • 1
    • 2
    • 3

    class name 定位

    存在并且全局唯一才可以定位到

    在这里插入图片描述

    代码示例:

    #通过class name 方式定位 
    browser.find_element_by_class_name("s_ipt nobg_s_fm_focusnobg").send_keys("selenium")
    
    • 1
    • 2

    CSS 定位

    CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略。
    在这里插入图片描述
    代码示例:

    #通过CSS 方式定位 
    browser.find_element_by_css_selector("#kw").send_keys("selenium")
    
    • 1
    • 2

    XPath 定位(这个是重点哟~)

    因为他一定一定可以定位到而且比较方便
    双击(右键)需要查找需要xpath的元素,拷贝中选择XPath
    在这里插入图片描述
    代码示例:

    #通过xphan 方式定位 
    browser.find_element_by_xpath("//*[@id="kw"]").send_keys("selenium")
    
    • 1
    • 2

    link text定位

    有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过链接内容,也就是 link text来定位。需要注意的是链接内容必须这个页面唯一,否则会报错。
    在这里插入图片描述
    代码示例:

    browser.find_element_by_link_text("hao123").click()
    
    • 1

    Partial link text 定位

    通过部分链接定位,。拿上面的例子,我可以只用链接的一部分文字进行匹配
    在这里插入图片描述
    代码示例:

    browser.find_element_by_partial_link_text("hao").click()
    
    • 1

    操作测试对象

    定位元素我们略知一二了,定位只是第一步,定位之后需要对这个元素进行操作,例如鼠标点击或者键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。

    这个我们在定位的时候已经见了很多了,这一类都大概这样写
    在这里插入图片描述

    操作方法
    1. send_keys() 在对象上模拟按键输入
    2. click() 点击对象
    3. clear() 清除对象输入的文本内容
    4. submit() 提交(与click大方向基本一致)
    5. sleep() 休眠
    6. implicitly_wait() 隐式等待/只能等待
    # coding = utf-8 
    from selenium import webdriver 
    import time #调入time 函数 
    browser = webdriver.Chrome() 
    browser.get("http://www.baidu.com") 
    browser.implicitly_wait(30) #隐式等待30秒 
    browser.find_element_by_id("kw").send_keys("selenium") 
    time.sleep(6)
    browser.find_element_by_id("kw").clear()
     browser.find_element_by_id("kw").send_keys("selenium")
    browser.find_element_by_id("su").click()
    # browser.find_element_by_id("su").submit() 这里与click一致
    browser.quit()#退出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    获取信息
    1. .text 用于获取元素的文本信息
    2. .title 用于获取title
    3. .current_url 用于获取url
    #coding = utf-8 
    from selenium import webdriver 
    driver = webdriver.Chrome() 
    driver.get('http://www.baidu.com') 
    data=browser.find_element_by_id("kw").text #text获取到data
    print(driver.title) # 把页面title 打印出来
    print(driver.current_url) # 把页面url 打印出来
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    浏览器的操作
    1. .maximize_window() 浏览器最大化
    2. .set_window_size(width, high) 设置浏览器宽、高
    3. .browser.forward() 操作浏览器的前进
    4. .browser.back() 操作浏览器后退
    5. document.documentElement.scrollTop=0 将浏览器滚动条滑到最顶端
    6. document.documentElement.scrollTop=10000 将浏览器滚动条滑到最底端
      小tips:滚动条的操作是依靠js脚本哟~
    #coding=utf-8 
    from selenium import webdriver 
    import time 
    #访问百度 
    driver=webdriver.Chrome() 
    #访问百度首页 
    first_url= 'http://www.baidu.com' 
    print("now access %s" %(first_url))
    driver.get(first_url) 
    time.sleep(2)
     #访问新闻页面 
    second_url='http://news.baidu.com'
    print("now access %s" %(second_url))
    driver.get(second_url) 
    time.sleep(2)
    #返回(后退)到百度首页 
    print("back to %s "%(first_url)) 
    driver.back() 
    time.sleep(1) 
    #前进到新闻页 
    print("forward to %s"%(second_url)) 
    driver.forward() 
    time.sleep(2)
    driver.get("http://www.baidu.com") 
    #搜索 
    print("设置浏览器宽480、高800显示")
    driver.set_window_size(480 , 800)
    time.sleep(3)
    driver.maximize_window() #将浏览器最大化显示
    driver.find_element_by_id("kw").send_keys("selenium") 
    driver.find_element_by_id("su").click() time.sleep(3)
    #将页面滚动条拖到底部
    js="var q=document.documentElement.scrollTop=10000" 
    driver.execute_script(js) time.sleep(3)
    #将滚动条移动到页面的顶部
    js="var q=document.documentElement.scrollTop=0" 
    driver.execute_script(js) 
    time.sleep(3) 
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    键盘事件
    1. send_keys()调用按键:
      引入键盘键要掉用这个包:from selenium.webdriver.common.keys import Keys
      例1:send_keys(Keys.TAB) # TAB
      例2:send_keys(Keys.ENTER) # 回车
    2. 键盘组合键用法(下面是windows的操作Mac是command)
      例1:send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
      例2:send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
    鼠标事件

    from selenium.webdriver.common.action_chains import ActionChains

    1. .context_click() 右击
    2. .click() 单击
    3. .double_click() 双击
    4. .drag_and_drop(element, target) 拖动 从element元素到target
    5. .move_to_element(element) 移动 移动到element
    6. ActionChains(driver)生成用户的行为。所有的行动都存储在actionchains 对象。
    7. .perform()通过perform()存储的行为。
      例:#鼠标拖动事件 ActionChains(driver).move_to_element(element).perform()

    多层定位

    1. 定位一个框架 :switch_to.frame(name_or_id_or_frame_element)
      注:如果要定位到某一个层级,必须从默认页面跳转(其实外部框架可以向内部框架跳转,但是建议先跳默认在随便跳)
    2. 定位一个窗口:switch_to.window(name_or_id_or_window_element)
    3. switch_to.default_content:从frame中嵌入的页面里跳出,跳回到最外面的默认页面中。

    selenium的操作就介绍到这里,当然不止这些,后续其他就自己百度开发咯

  • 相关阅读:
    k8s环境设置-pod下载及重启策略
    淘口令真实url API 返回值说明
    Node-Web模块的用法
    防抖和节流
    vscode用r无法读取文件
    【学习笔记77】ajax的函数封装
    LabVIEW专栏五、网口
    java后端返回给前端对象时去除值为空或NULL的属性
    QTday3
    【Docker】Linux网桥连接多个命名空间
  • 原文地址:https://blog.csdn.net/weixin_45696320/article/details/126183350