元素定位(二)
一.实例
如何定位到下图第二个"抢投标",有一种方法是利用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. 应用场景:页面显示为一个表格样式的数据列,需要通过组合来定位元素
实例:定位前程贷的"抢投标"

三、framea框架里面元素定位
frame:一个网页里面嵌套了另外一个框架/页面
1.如果我们需要切换到你想要的内嵌页面上去,就需要定位到frame框架,然后切换过去,切换用到的方法:driver.switch_to.frame(),然后可以自己去定位框架的元素,去进行对应的操作
2.当iframe上的操作完后,想重新回到主页面上操作元素,这时候,就可以用driver.switch_to.default_content()
举例:腾讯课堂登录
from selenium import webdriver
import time
drive = webdriver.Chrome()
drive.get("https://ke.qq.com/")
drive.maximize_window()
drive.find_element_by_id("js_login").click()
time.sleep(3)
drive.find_element_by_xpath('//a[@class="js-btns-enter btns-enter btns-enter-qq"]').click()
time.sleep(3)
drive.switch_to_frame("login_frame_qq")
drive.find_element_by_xpath('//a[text()="帐号密码登录"]').click()
# drive.find_element_by_id("switcher_plogin").click()
drive.find_element_by_id("u").send_keys("825528598")
drive.find_element_by_id("p").send_keys("fumeiwoaini2016")
drive.find_element_by_id("login_button").click()
time.sleep(3)
drive.switch_to.default_content()
drive.quit()
四、滚动条之后的元素定位
方法一:使用js脚本拖动到指定的地方
第一步:找到这个元素
target=driver.find_element_by_id("id_keypair")
第二步:利用js拖动到可见区域
driver.execute_script("arguments[0].scrollIntoView();",target)
from selenium import webdriver import time #关闭Chrome提示框 option = webdriver.ChromeOptions() option.add_argument('disable-infobars') drive = webdriver.Chrome(chrome_options=option) #隐性等待 drive.implicitly_wait(50) #死等待 # time.sleep(3) drive.get("https://www.baidu.com/") drive.maximize_window() drive.find_element_by_id("kw").send_keys("selenium") drive.find_element_by_id("su").click() #滚动操作1、找到这个元素 target1 = drive.find_element_by_xpath('//div[@class="result c-container " and @id="7"]/h3/a') #2、执行Js语句,滚动页面,底部对齐 drive.execute_script("arguments[0].scrollIntoView(false);",target1) #3、对元素进行操作 target1.click() drive.quit()
方法二:根据页面显示进行变通,发送tab键
根据页面显示进行变通,发送tab键
例如:百度搜索结果—定位到滚动条滚动之后的某个链接。
拓展
1.移动到元素element对象的“底端”与当前窗口的“底部”对齐
当网页顶部有固定遮罩层,就需要滚动元素到页面底部
drive.execute_script("arguments[0].scrollIntoView(false);",element)
2.移动到元素element对象的“顶端”与当前窗口的“顶部”对齐
drive.execute_script("arguments[0].scrollIntoView();",element)
3.滚动到顶部:
js="vars=document.documentElement.scrollTop=0" driver.excute_script(js)
或者
driver.excute_script("window.scrollTo(document.body.scrollHeight,0)
4.滚动到底部:
js="vars=document.documentElement.scrollTop=100000" driver.excute_script(js)
或者
driver.excute_script("window.scrollTo(0,document.body.scrollHeight)

浙公网安备 33010602011771号