一个页面的最基本组成单元为元素, 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部分源码:
...<body class style><div id="wrapper" class="wrapper_new"><script>…</script><div id="head"><div id="s_top_wrap" class="s-top-wrap s-isindex-wrap">…</div><div id="u">…</div><div id="s-top-left" class="s-top-left s-isindex-wrap">…</div><div id="u1" class="s-top-right s-isindex-wrap">…</div><div id="head_wrapper" class="head_wrapper s-isindex-wrap nologin"><div class="s_form s_form_nologin"><div class="s_form_wrapper soutu-env-nomac soutu-env-index"><style>…</style><div id="lg" class="s-p-top">…</div><a href="/" id="result_logo" onmousedown="return c({'fm':'tab','tab':'logo'})">…</a><form id="form" name="f" action="/s" class="fm"><input type="hidden" name="ie" value="utf-8"><input type="hidden" name="f" value="8"><input type="hidden" name="rsv_bp" value="1"><input type="hidden" name="rsv_idx" value="1"><input type="hidden" name="ch" value><input type="hidden" name="tn" value="baidu"><input type="hidden" name="bar" value><span class="bg s_ipt_wr quickdelete-wrap"><span class="soutu-btn"></span><input id="kw" name="wd" class="s_ipt" value maxlength="255" autocomplete="off"><span class="bg s_btn_wr"><input type="submit" id="su" value="百度一下" class="bg s_btn">…</input>...
搜素框:
百度一下确认按钮:…
1 id 定位
#通过 ID 查找,然后输入,并点击driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("su").click()
2 name 定位
#通过 name 查找,然后输入driver.find_element_by_name("wd").send_keys("selenium")
3 class name 定位
driver.find_element_by_class_name("s_btn").click()# 或#clss name 名查找搜索框driver.find_element_by_class_name("s_ipt").send_keys("selenium")elements = driver.find_elements_by_tag_name('input')print(elements)for element in elements:className = element.get_attribute('class')print(className)if className == 'bg s_btn':subscript=elements.index(element)elements[subscript].click()
4 tag name 定位
driver.find_element_by_tag_name("input").send_keys("selenium")
注:在HTML开发是有很多tag元素是设计的不可见的,所以tag name 方式很容易报错。
5 link text 定位
driver.find_element_by_link_text("新闻").click()driver.back()
6 partial link text 定位
driver.find_element_by_partial_link_text("新").click()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’]
#通过 xpath 查找,然后输入driver.find_element_by_xpath(r'//*[@id="kw"]').send_keys("selenium")
8 css selector 定位
#css 名查找搜索框driver.find_element_by_css_selector("#kw").send_keys("selenium")driver.find_element_by_css_selector("#su").click()
