一个页面的最基本组成单元为元素, 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()