一个页面的最基本组成单元为元素, HTML元素就是 HTML 文件的一个基本组成单元, Selenium 提供了 8 种定位方式 :

定位方式 在Python selenium 中所对应的方法
id find_element_by_id()
name find_element_by_name()
class name find_element_by_class_name()
tag name find_element_by_tag_name()
link text find_element_by_link_text()
partial link text find_element_by_partial_link_text()
xpath find_element_by_xpath()
css selector find_element_by_css_selector()

百度首页HTML部分源码:

  1. ...
  2. <body class style>
  3. <div id="wrapper" class="wrapper_new">
  4. <script></script>
  5. <div id="head">
  6. <div id="s_top_wrap" class="s-top-wrap s-isindex-wrap"></div>
  7. <div id="u"></div>
  8. <div id="s-top-left" class="s-top-left s-isindex-wrap"></div>
  9. <div id="u1" class="s-top-right s-isindex-wrap"></div>
  10. <div id="head_wrapper" class="head_wrapper s-isindex-wrap nologin">
  11. <div class="s_form s_form_nologin">
  12. <div class="s_form_wrapper soutu-env-nomac soutu-env-index">
  13. <style></style>
  14. <div id="lg" class="s-p-top"></div>
  15. <a href="/" id="result_logo" onmousedown="return c({'fm':'tab','tab':'logo'})"></a>
  16. <form id="form" name="f" action="/s" class="fm">
  17. <input type="hidden" name="ie" value="utf-8">
  18. <input type="hidden" name="f" value="8">
  19. <input type="hidden" name="rsv_bp" value="1">
  20. <input type="hidden" name="rsv_idx" value="1">
  21. <input type="hidden" name="ch" value>
  22. <input type="hidden" name="tn" value="baidu">
  23. <input type="hidden" name="bar" value>
  24. <span class="bg s_ipt_wr quickdelete-wrap">
  25. <span class="soutu-btn"></span>
  26. <input id="kw" name="wd" class="s_ipt" value maxlength="255" autocomplete="off">
  27. <span class="bg s_btn_wr">
  28. <input type="submit" id="su" value="百度一下" class="bg s_btn"></input>
  29. ...

搜素框:
百度一下确认按钮:

1 id 定位

  1. #通过 ID 查找,然后输入,并点击
  2. driver.find_element_by_id("kw").send_keys("selenium")
  3. driver.find_element_by_id("su").click()

2 name 定位

  1. #通过 name 查找,然后输入
  2. driver.find_element_by_name("wd").send_keys("selenium")

3 class name 定位

  1. driver.find_element_by_class_name("s_btn").click()
  2. # 或
  3. #clss name 名查找搜索框
  4. driver.find_element_by_class_name("s_ipt").send_keys("selenium")
  5. elements = driver.find_elements_by_tag_name('input')
  6. print(elements)
  7. for element in elements:
  8. className = element.get_attribute('class')
  9. print(className)
  10. if className == 'bg s_btn':
  11. subscript=elements.index(element)
  12. elements[subscript].click()

4 tag name 定位

  1. driver.find_element_by_tag_name("input").send_keys("selenium")

注:在HTML开发是有很多tag元素是设计的不可见的,所以tag name 方式很容易报错。

5 link text 定位

  1. driver.find_element_by_link_text("新闻").click()
  2. driver.back()

6 partial link text 定位

  1. driver.find_element_by_partial_link_text("新").click()
  2. driver.back()

7 xpath 定位

百度搜索框的XPATH写法:

  • //*[@id=’kw’]
  • //*[@name=’wd’]
  • //input[@class=’s_ipt’]
  • /html/body/form/span/input
  • //span[@class=’soutu-btn’]/input
  • //form[@id=’form’]/span/input
  • //input[@id=’kw’ and @name=’wd’]
    1. #通过 xpath 查找,然后输入
    2. driver.find_element_by_xpath(r'//*[@id="kw"]').send_keys("selenium")

    8 css selector 定位

    1. #css 名查找搜索框
    2. driver.find_element_by_css_selector("#kw").send_keys("selenium")
    3. driver.find_element_by_css_selector("#su").click()