zoukankan      html  css  js  c++  java
  • web自动化:元素定位(二)

    一. 实例

    如何定位到下图第二个"抢投标",有一种方法是利用xpath定位 //a[@href="/loan/loan_detail/Id/7190.html" and text()="抢投标"],但是我们注意到,这个链接中的7190是id值,而页面中的id值是可以变化的,因此当标变化时,我们又得重新写xpath定位表示式了,那么,有没有一种更好的方式来解决这个问题,这就需要用到xpath的轴定位

    二. xpath的轴定位

    1. 轴运算

    轴名称 描述
    ancestor 选取祖先节点(包括父节点)
    parent 选取父节点
    preceding 选取当前节点标签之前的所有节点(按html页面先后顺序)
    preceding-sibling 选取当前节点标签之前的所有兄弟节点
    following 选取当前节点标签之后的所有节点(按html页面先后顺序)
    following-sibling 选取当前节点标签之后的所有兄弟节点

    2. 使用语法:轴名称::节点名称

    例如: //div//table//td//preceding::td

    3. 应用场景:页面显示为一个表格样式的数据列,需要通过组合来定位元素

    4. 实例1:利用xpath轴定位,定位到下图第二个"抢投标"

    实例2:定位到下图"企业3"中的"375万"

    注意:我们不能通过//div[text()="企业3"]/following-sibling::div//span[text()="375万"]来定位,因为金额是可变的,如果这个标金额变化了,这个表达式就匹配不到了。所以定位时,一定要考虑到哪些是变化的,比如文本内容,元素下标(同一个span[n]),变化的一定不能作为定位表达式中的一部分,一般利用元素的固定的属性值来定位

    三. 滚动条之后的元素定位

    方法一:

    使用js脚本拖动到指定的地方

    第一步:找到这个元素

    target = driver.find_element_by_id("id_keypair")

    第二步:利用js

    driver.execute_script("arguments[0].scrollIntoView();", target)    #拖动元素到可见元素去

    实例:比如现在想定位下图中的id="local_current"所在的元素,但是这个元素所代表的区域不是页面的可见区域,我们需要执行js来拖动滚动条

    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("http://news.baidu.com/")
    driver.maximize_window()
    sleep(2)
    target = driver.find_element_by_id("local_current")
    driver.execute_script("arguments[0].scrollIntoView();", target)

    方法二:根据页面显示进行变通,发送tab键

    例如:百度搜索结果—定位到滚动条滚动之后的某个链接。

    发送tab键切换到密码框

    from selenium.webdriver.common.keys import Keys
    
    driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)

    拓展:

    滚动到顶部:

    js = "varq=document.documentElement.scrollTop=0"
    driver.execute_script(js)

    或者

    driver.execute_script("window.scrollTo(document.body.scrollHeight, 0)")

    滚动到底部:

    js = "varq=document.documentElement.scrollTop=10000"
    driver.execute_script(js)

    或者

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

    实例:拖动百度新闻页面的滚动条到底部和顶部

    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("http://news.baidu.com/")
    driver.maximize_window()
    sleep(2)
    #先将滚动条滚动到底部
    js_1 = "varq=document.documentElement.scrollTop=10000"
    driver.execute_script(js_1)
    sleep(2)
    #再将滚动条滚动到顶部
    js_2 = "varq=document.documentElement.scrollTop=0"
    driver.execute_script(js_2)
  • 相关阅读:
    phpMyAdmin 4.7.x CSRF 漏洞利用
    20155236范晨歌_Web安全基础实践
    20155236范晨歌_Web基础
    20155306 白皎 免考实践总结——0day漏洞
    20155306 白皎 0day漏洞——漏洞的复现
    20155306 白皎 0day漏洞——漏洞利用原理之GS
    20155306 白皎 0day漏洞——漏洞利用原理之DEP
    20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用
    20155306 白皎 0day漏洞——基础知识
    20155306白皎 《网络对抗》 Exp9 Web安全基础实践
  • 原文地址:https://www.cnblogs.com/my_captain/p/9163554.html
Copyright © 2011-2022 走看看