ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UI常见的元素定位方式

2022-03-08 17:31:33  阅读:123  来源: 互联网

标签:定位 webdriver selenium 元素 driver element UI import find


  1 ## 元素定位方式
  2 
  3 ### Xpath 定位
  4 
  5 #### 通过ID定位 
  6 
  7 ##### 第一种 使用find_element_by_xpath
  8 
  9 ```python
 10 from selenium import webdriver
 11 import time
 12 from selenium.webdriver.support.wait import WebDriverWait
 13 from selenium.common.exceptions import NoSuchElementException
 14 
 15 
 16 driver = webdriver.Chrome()
 17 driver.maximize_window()
 18 driver.implicitly_wait(5)
 19 
 20 driver.get('http://www.baidu.com')
 21 try:
 22     driver.find_element_by_xpath("//*[@id='kw']").send_keys('xpath常用八种定位方法')
 23 
 24 except NoSuchElementException as err:
 25     print(err)
 26 
 27 finally:
 28     pass
 29 
 30 time.sleep(3)
 31 
 32 driver.quit()
 33 
 34 ```
 35 
 36 #####        第二种使用 webdriver.common.by 模块
 37 
 38 ```python
 39 from selenium import webdriver
 40 import time
 41 from selenium.webdriver.support.wait import WebDriverWait
 42 from selenium.common.exceptions import NoSuchElementException
 43 from selenium.webdriver.common.by import By  as by
 44 
 45 
 46 driver = webdriver.Chrome()
 47 driver.maximize_window()
 48 driver.implicitly_wait(5)
 49 
 50 driver.get('http://www.baidu.com')
 51 try:
 52     driver.find_element(by.XPATH,"//*[@id='kw']").send_keys('你为什么这么好看')
 53 
 54 except NoSuchElementException as err:
 55     print(err)
 56 
 57 finally:
 58     pass
 59 
 60 time.sleep(3)
 61 
 62 driver.quit()
 63 ```
 64 
 65 #### 通过name定位
 66 
 67 ##### 第一种 使用find_element_by_xpath
 68 
 69 ```python
 70 from selenium import webdriver
 71 import time
 72 from selenium.webdriver.support.wait import WebDriverWait
 73 from selenium.common.exceptions import NoSuchElementException
 74 
 75 
 76 driver = webdriver.Chrome()
 77 driver.maximize_window()
 78 driver.implicitly_wait(5)
 79 
 80 driver.get('http://www.baidu.com')
 81 try:
 82     driver.find_element_by_xpath("//*[@name='wd']").send_keys('哈哈哈哈哈')
 83 
 84 except NoSuchElementException as err:
 85     print(err)
 86 
 87 finally:
 88     pass
 89 
 90 time.sleep(3)
 91 
 92 driver.quit()
 93 
 94 ```
 95 
 96 #####  第二种使用 webdriver.common.by 模块
 97 
 98 ```python
 99 from selenium import webdriver
100 import time
101 from selenium.webdriver.support.wait import WebDriverWait
102 from selenium.common.exceptions import NoSuchElementException
103 from selenium.webdriver.common.by import By  as by
104 
105 
106 driver = webdriver.Chrome()
107 driver.maximize_window()
108 driver.implicitly_wait(5)
109 
110 driver.get('http://www.baidu.com')
111 try:
112     driver.find_element(by.XPATH,"//*[@name='wd']").send_keys('你为什么这么好看')
113 
114 except NoSuchElementException as err:
115     print(err)
116 
117 finally:
118     pass
119 
120 time.sleep(3)
121 
122 driver.quit()
123 ```
124 
125 #### 通过class定位
126 
127 ##### 第一种 使用find_element_by_xpath
128 
129 ```python
130 from selenium import webdriver
131 import time
132 from selenium.webdriver.support.wait import WebDriverWait
133 from selenium.common.exceptions import NoSuchElementException
134 
135 
136 driver = webdriver.Chrome()
137 driver.maximize_window()
138 driver.implicitly_wait(5)
139 
140 driver.get('http://www.baidu.com')
141 try:
142     driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys('哈哈哈哈哈')
143 
144 except NoSuchElementException as err:
145     print(err)
146 
147 finally:
148     pass
149 
150 time.sleep(3)
151 
152 driver.quit()
153 
154 ```
155 
156 #####   第二种使用 webdriver.common.by 模块
157 
158 ```python
159 from selenium import webdriver
160 import time
161 from selenium.webdriver.support.wait import WebDriverWait
162 from selenium.common.exceptions import NoSuchElementException
163 from selenium.webdriver.common.by import By  as by
164 
165 
166 driver = webdriver.Chrome()
167 driver.maximize_window()
168 driver.implicitly_wait(5)
169 
170 driver.get('http://www.baidu.com')
171 try:
172     driver.find_element(by.XPATH,"//*[@class='s_ipt']").send_keys('你为什么这么好看')
173 
174 except NoSuchElementException as err:
175     print(err)
176 
177 finally:
178     pass
179 
180 time.sleep(3)
181 
182 driver.quit()
183 
184 
185 ```
186 
187 #### n相对路径和绝对路径定位
188 
189 先介绍一下  ‘/’ 和‘//’区别  ,‘/’ 表示绝对路径  ‘//’表示相对路径 
190 
191 比如 : //*[@id="su"]  表示 匹配页面下 所有的 id属性为 su的 元素
192 
193   //*[@id="form"]/input[11]  表示匹配 所有 属性ID 为 form 元素 下 lnput 控件 的 11位元素  
194 
195 ######建议 找个视频看一下 这个文字不好描述 
196 
197 
198 
199 相对定位 -- 以// 开头 如://form//input[@name="phone"]    推荐使用相对定位 定位元素   
200 
201 ```python
202 from selenium import webdriver
203 import time
204 from selenium.webdriver.support.wait import WebDriverWait
205 from selenium.common.exceptions import NoSuchElementException
206 
207 
208 driver = webdriver.Chrome()
209 driver.maximize_window()
210 driver.implicitly_wait(5)
211 
212 driver.get('http://www.baidu.com')
213 try:
214     driver.find_element_by_xpath('//*[@id="s-top-left"]/a[1]').click()
215 except NoSuchElementException as err:
216     print(err)
217 
218 finally:
219     pass
220 
221 time.sleep(3)
222 
223 driver.quit()
224 ```
225 
226 
227 
228  绝对定位 -- 以/ 开头,但是要从根目录开始,比较繁琐,一般不建议使用 如:/html/body/div/a
229 
230 ```python
231 from selenium import webdriver
232 import time
233 from selenium.webdriver.support.wait import WebDriverWait
234 from selenium.common.exceptions import NoSuchElementException
235 
236 
237 driver = webdriver.Chrome()
238 driver.maximize_window()
239 driver.implicitly_wait(5)
240 
241 driver.get('http://www.baidu.com')
242 try:
243     driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[3]/a[1]').click()
244 except NoSuchElementException as err:
245     print(err)
246 
247 finally:
248     pass
249 
250 time.sleep(3)
251 
252 driver.quit()
253 
254 ```
255 
256 ### CSS定位方式
257 
258 1. css是一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器
259 2. css定位就是通过css选择器工具进行定位的
260 3. 极力推荐使用css,css查找效率高,语法简单
261 
262 ```
263 driver.find_element_by_css_selector()
264 ```
265 
266 ##### id[选择器]
267 
268    前提:元素必须有id属性
269 
270    语法:#id   如:id='kw'  写入代码 就是  #kw
271 
272 ```python
273 from selenium import webdriver
274 import time
275 from selenium.webdriver.support.wait import WebDriverWait
276 from selenium.common.exceptions import NoSuchElementException
277 
278 
279 driver = webdriver.Chrome()
280 driver.maximize_window()
281 driver.implicitly_wait(5)
282 
283 driver.get('http://www.baidu.com')
284 try:
285     driver.find_element_by_css_selector("#kw").send_keys('css的id选择器')
286 
287 except NoSuchElementException as err:
288     print(err)
289 
290 finally:
291     pass
292 
293 time.sleep(3)
294 
295 driver.quit()
296 ```
297 
298 ##### 属性选择器
299 
300  语法:[属性名='属性值']
301 
302 ```python
303 from selenium import webdriver
304 import time
305 from selenium.webdriver.support.wait import WebDriverWait
306 from selenium.common.exceptions import NoSuchElementException
307 
308 
309 driver = webdriver.Chrome()
310 driver.maximize_window()
311 driver.implicitly_wait(5)
312 
313 driver.get('http://www.baidu.com')
314 try:
315     driver.find_element_by_css_selector("[id='kw']").send_keys('css的id选择器')
316 
317 except NoSuchElementException as err:
318     print(err)
319 
320 finally:
321     pass
322 
323 time.sleep(3)
324 
325 driver.quit()
326 ```
327 
328 ##### class[选择器]
329 
330    前提:元素是必须有class属性
331 
332    语法:.class  如:class = 's_ipt'   写入代码为 .s_ipt
333 
334 ```python
335 from selenium import webdriver
336 import time
337 from selenium.webdriver.support.wait import WebDriverWait
338 from selenium.common.exceptions import NoSuchElementException
339 driver = webdriver.Chrome()
340 driver.maximize_window()
341 driver.implicitly_wait(5)
342 driver.get('http://www.baidu.com')
343 try:
344     driver.find_element_by_css_selector(".s_ipt").send_keys('css的class选择器')
345 
346 except NoSuchElementException as err:
347     print(err)
348 
349 finally:
350     pass
351 
352 time.sleep(3)
353 
354 driver.quit()
355 ```
356 
357 ##### 层级选择器
358 
359 (1)父级标签>子级标签,如p>input  
360 
361    (2)上级任意标签  子级标签,如:p input   平时工作 不常用 知道就行   
362 
363 ```python
364 from selenium import webdriver
365 import time
366 from selenium.webdriver.support.wait import WebDriverWait
367 from selenium.common.exceptions import NoSuchElementException
368 driver = webdriver.Chrome()
369 driver.maximize_window()
370 driver.implicitly_wait(5)
371 driver.get('http://www.baidu.com')
372 try:
373     driver.find_element_by_css_selector('div>form>span>input.s_ipt').send_keys('css的层级选择器')
374 
375 except NoSuchElementException as err:
376     print(err)
377 
378 finally:
379     pass
380 
381 time.sleep(3)
382 
383 driver.quit()
384 ```
385 
386 ### 通过tag_name定位
387 
388 ** 明:tag_name是通过标签名称来定位的**   比如<a></a>  ,<p></p>   等标签   这种定位方式由于标签在一个页面众多 所以经常定位不准确  不推荐在工作中使用这种定位方式 定位 
389 
390 **注意:如果页面中存在多个相同的标签,默认返回第一个标签元素。**
391 
392 ```
393 driver.find_element_by_tag_name("标签名")
394 ```
395 
396 ```python
397 from selenium import webdriver
398 from time import sleep
399 
400 # 这里使用优设导航的百度搜索界面
401 
402 # 获取浏览器对象
403 driver = webdriver.Chrome()
404 driver.maximize_window()
405 driver.implicitly_wait(5)
406 # 获取网络链接
407 url = "https://hao.uisdc.com/"
408 driver.get(url)
409 # 获取搜索输入框,输入:优设导航的百度搜索
410 driver.find_element_by_tag_name("input").send_keys("优设导航的百度搜索")
411 # 暂停3秒
412 sleep(3)
413 # 退出浏览器驱动
414 driver.quit()
415 ```
416 
417 
418 
419 ### 通过link_text 定位
420 
421 **注意:link_text:只能使用精准的匹配(a标签的全部文本内容)**
422 
423 ```python
424 driver=find_element_by_link_text("文本")
425 ```
426 
427 ```python
428 from selenium import webdriver
429 from time import sleep
430 
431 # 这里使用hao123网站界面
432 
433 # 获取浏览器对象
434 driver = webdriver.Chrome()
435 driver.maximize_window()
436 driver.implicitly_wait(5)
437 # 获取网络链接
438 url = "https://www.hao123.com/"
439 driver.get(url)
440 # 获取hao123网站的12306超链接位置,并点击超链接
441 driver.find_element_by_link_text("12306").click()
442 
443 # 暂停6秒
444 sleep(6)
445 # 退出浏览器驱动
446 driver.quit()
447 ```
448 
449 
450 
451 ### 通过partial_link_text定位
452 
453 **1、说明:定位超链接标签** 
454 
455 ```python
456 driver.find_element_by_partial_link_text("哔哩").click()
457 ```
458 
459 *注意:可以使用精准或模糊匹配,如果使用模糊匹配最好能使用可以唯一关键字;**
460 
461 **如果有多个值,默认返回第一个值。**
462 
463 ```python
464 from selenium import webdriver
465 from time import sleep
466 from selenium.common.exceptions import NoSuchElementException
467 # 这里使用hao123网站界面
468 
469 # 获取浏览器对象
470 driver = webdriver.Chrome()
471 driver.maximize_window()
472 driver.implicitly_wait(5)
473 # 获取网络链接
474 url = "https://www.hao123.com/"
475 driver.get(url)
476 # 获取hao123网站的12306超链接位置,并点击超链接
477 # driver.find_element_by_link_text("12306").click()
478 try:
479     driver.find_element_by_partial_link_text("哔哩").click()
480 except NoSuchElementException as err:
481     print(err)
482 finally:
483     driver.find_element_by_partial_link_text("中国大学").click()
484 # 暂停6秒
485 sleep(6)
486 # 退出浏览器驱动
487 driver.quit()
488 ```
489 
490 ### id定位
491 
492 **说明:通过元素的id属性定位,id一般情况下在当前页面中是唯一的。**
493 
494 ```
495 driver.find_element_by_id(id)
496 ```
497 
498 ```python
499 from selenium import webdriver
500 from time import sleep
501 
502 # Pixabay是全球知名的图库网站及充满活力的创意社区,这里使用它的登录界面
503 
504 # 获取浏览器对象
505 driver = webdriver.Chrome()
506 driver.maximize_window()
507 driver.implicitly_wait(5)
508 
509 # 本地url需要注意:\反斜杠在Python中是转义字符,1、可以在"...\..."之前加字符r,如:r"..\."
510 # 2、也可以将链接中的\再添加一个\,如:"..\\.."
511 # 3、也可以写成"file:///E:....\..."
512 
513 # 获取网络链接
514 url = "https://pixabay.com/accounts/login/?source=main_nav&next=/"
515 driver.get(url)
516 # 获取用户名元素和密码元素
517 username = driver.find_element_by_id("id_username")
518 password = driver.find_element_by_id("id_password")
519 # 用户名输入admin,密码输入123241234
520 username.send_keys("admin")
521 password.send_keys("123241234")
522 # 暂停3秒
523 sleep(3)
524 # 退出浏览器驱动
525 driver.quit()
526 ```
527 
528 ### name定位
529 
530 **说明:name定位就是根据元素name属性来定位(前提是有name属性)**
531 
532 ```
533 element=driver.find_element_by_name(name)
534 ```
535 
536 ```python
537 from selenium import webdriver
538 from time import sleep
539 
540 # 这里使用阿里Iconfont的登录界面
541 
542 # 获取浏览器对象
543 driver = webdriver.Chrome()
544 driver.maximize_window()
545 driver.implicitly_wait(5)
546 # 获取网络链接
547 url = "https://login.alibaba-inc.com/ssoLogin.htm?BACK_URL=https%3A%2F%2Fwww.iconfont.cn%2Fapi%2FsendBucSSOToken.do&preLoginKey=HQbkPavlaI1572415135309WAbvcSruKi&CLIENT_VERSION=0.3.7&CONTEXT_PATH=%2Fapi&APP_NAME=icon-font&CANCEL_CERT=true"
548 driver.get(url)
549 # 获取用户名元素和密码元素,用户名输入admin,密码输入123241234
550 driver.find_element_by_name("account").send_keys("admin")
551 driver.find_element_by_name("password").send_keys("123241234")
552 # 暂停3秒
553 sleep(3)
554 # 退出浏览器驱动
555 driver.quit()
556 ```
557 
558 ### class_name定位
559 
560 **说明:class_name定位就是根据元素class属性值来定位元素。HTML通过使用class来定义元素的样式。**
561 
562 **前提:元素有class属性。**
563 
564 **注意:如果class有多个属性值,只能使用其中的一个。**
565 
566 ```
567 element=driver.find_element_by_class_name(class_name)
568 ```
569 
570 ```python
571 from selenium import webdriver
572 from time import sleep
573 
574 # 这里使用几案网的登录界面
575 
576 # 获取浏览器对象
577 driver = webdriver.Chrome()
578 driver.maximize_window()
579 driver.implicitly_wait(5)
580 # 获取网络链接
581 url = "http://www.ji-an.com/user/index/login"
582 driver.get(url)
583 # 获取手机号码元素和密码元素,用户名输入手机号,密码输入123241234
584 driver.find_element_by_class_name("form-control").send_keys("18255676189")
585 driver.find_element_by_class_name("password").send_keys("123241234")
586 # 暂停3秒
587 sleep(3)
588 # 退出浏览器驱动
589 driver.quit ()
590 ```
591 

 

标签:定位,webdriver,selenium,元素,driver,element,UI,import,find
来源: https://www.cnblogs.com/chendakeng/p/15981522.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有