Selenium极力推荐使用CSS 定位,而不是XPath来定位元素,原因是CSS 定位比XPath 定速度快,语法也更加简洁。
CSS常用定位方法
选择器 | 例子 | 描述 |
.class | .intro | class选择器,选择class=“intro”的所有元素 |
#id | #firstname | id选择器,选择id=“firstname”的所有元素 |
* | * | 选择所有元素 |
element | p | 元素所有<p>元素 |
element>element | div>input | 选择父元素为<div>的所有<input>元素 |
element+element | div+input | 选择同一级中紧接在<div>元素之后的所有<input>元素 |
[attribute=value] | [target=_blank] | 选择target="_blank"的所有元素 |
通过前端工具获取到百度首页的代码,部分如下所示:
<span class="bg s_ipt_wr quickdelete-wrap"> <span class="soutu-btn"></span> <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"> <a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"></a> </span> <span class="bg s_btn_wr"> <input id="su" class="bg s_btn" type="submit" value="百度一下"> </span>
案例:在百度首页的搜索框输入selenium,点击搜索按钮
通过class属性定位
from selenium import webdriver from time import sleep driver=webdriver.Firefox() driver.get("http://www.baidu.com") sleep(2) driver.find_element_by_css_selector(".s_ipt").send_keys("selenium") sleep(2)
driver.find_element_by_id("su").click()
driver.quit()
通过id属性定位
driver.find_element_by_css_selector("#kw").send_keys("selenium")
通过属性定位
driver.find_element_by_css_selector("[autocomplete='off']").send_keys("selenium")
通过元素层级定位
driver.find_element_by_css_selector("form#form>span>input").send_keys("selenium") #可以组合 driver.find_element_by_css_selector("form#form>span>input[autocomplete='off']").send_keys("selenium")