文章目录
id定位
find_element_by_id()
采用id属性进行定位。例如在百度页面中输入关键字 Selenium 进行搜索。百度部分关键html源码如下:
百度输入框和百度一下的按钮都有id,那么定位代码如下:
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
#等待
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("Selenium")
driver.find_element_by_id("su").click()
#等待两秒钟
time.sleep(2)
#退出浏览器
driver.quit()
name定位
find_element_by_name()
driver.find_element_by_name("wd")
class_name定位
find_element_by_class_name()
driver.find_element_by_class_name("s_ipt")
xpath定位
find_element_by_xpath()
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
获取xpath、css_selector路径方法
打开谷歌浏览器–>打开百度–>键盘点击F12–点击定位位置–>点击源码位置–>邮件copy
绝对路径
如百度搜索框的绝对路径xpath定位:
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")
相对路径(属性标签等)
搜索框还可以利用id和name属性去定位:
driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
标签名input也可以定位,只要在该标签内,任意属性都可以,比如搜索框的maxlength属性:
driver.find_element_by_xpath("//input[@maxlength='255']")
driver.find_element_by_xpath("//form[@id='form']/span/input")
注:如果元素的单个属性无法确定其唯一性,可以用and连接多个属性去确定
css_selector定位
find_element_by_css_selector()
CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector(".s_ipt")
注:class是用.标记,id是用#标记
driver.find_element_by_css_selector("input[autocomplete='off']").send_keys("selenum")
driver.find_element_by_css_selector("span.bg.s_btn_wr>input#su").click()
说明
- “input[autocomplete=‘off’]”,autocomplete=‘off’ 为input内属性值;
- “span.bg.s_btn_wr>input#su”,先定位到一个class名为bg >s_btn_wr的span标签,在这个标签下面有一个id为su的input标签
注:在css里面下级标签元素用>连接,如果class里面有空格,空格用.进行连接
tag_name定位
find_element_by_tag_name ()
html标签,如input、a、form等
一般定位如下:find_element_by_tag_name(“input”),因为一个html一个标签存在多个因此这种定位方式用的比较少
link_text 定位
find_element_by_partial_link_text()
定位标签:
html源码:
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
#全部匹配
driver.find_element_by_link_text("新闻").click()
#部分匹配
driver.find_element_by_partial_link_text("闻").click()
Xpath&Css定位方法速查表
描述 | Xpath | Css |
---|---|---|
直接子元素 | //div/a | div > a |
子元素或后代元素 | //div//a | div a |
以id定位 | //div[@id=‘idValue’]//a | div#idValue a |
以class定位 | //div[@class=‘classValue’]//a | div.classValue a |
同级弟弟元素 | //ul/li[@class=‘first’]/following- | ul>li.first + li |
属性 | //form/input[@name=‘username’] | form input[name=‘username’] |
多个属性 | //input[@name=‘continue’ and | input[name=‘continue’][type='button |
第4个子元素 | //ul[@id=‘list’]/li[4] | ul#list li:nth-child(4) |
第1个子元素 | //ul[@id=‘list’]/li[1] | ul#list li:first-child |
最后1个子元素 | //ul[@id=‘list’]/li[last()] | ul#list li:last-child |
属性包含某字段 | //div[contains(@title,‘Title’)] | div[title*=“Title”] |
属性以某字段开头 | //input[starts-with(@name,‘user’)] | input[name^=“user”] |
属性以某字段结尾 | //input[ends-with(@name,‘name’)] | input[name$=“name”] |
text中包含某字段 | //div[contains(text(), ‘text’)] | 无法定位 |
元素有某属性 | //div[@title] | div[title] |
父节点 | //div/… | 无法定位 |
同级哥哥节点 | //li/preceding-sibling::div[1] | 无法定位 |
By定位
#By定位必备导入
from selenium.webdriver.common.by import By
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
elements复数定位
说明:复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list值
如上图需要定位到时视频,再点击视频链接
#注意下标是从0开始,所以视频下标为3
driver.find_elements_by_class_name("mnav")[3].click()
#也可以借助pop()函数,一般pop()或pop(-1)表示获取元素种的最后一个,pop(3)表示第4个
driver.find_elements("css selector",".mnav").pop(3).click()
JS的定位
#以下Element 返回单值,Elements复数返回列表值
id定位:document.getElementById()
name定位:document.getElementsByName()
tag定位:document.getElementsByTagName()
class定位:document.getElementsByClassName()
css定位:document.querySelectorAll()
源码举例
search_js = "document.getElementsByName('wd')[0].value='selenium';"
search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';"
button_js = "document.getElementById('su').click();"
button_js2 = "document.getElementsByClassName('s_btn')[0].click()"
driver.execute_script(search_js2)
driver.execute_script(button_js2)
以上为常用的四种js定位方式都需要执行的就execute_script())
jQuery语法是为HTML元素的选取编制的,可以对元素执行一些具体的操作
基础语法是$(selector).action()
$符号定义jQuery,selector选择器用来查询具体的HTML元素,通过action()来执行对元素的具体操作。
其中我们经常用到的action()在jq中有这么几种:
$(selector).val('input_value') 其中input_value表示要输入的文本的值
$(selector).val('') 如果为空,则执行后是清空的操作
$(selector).click() 点击
源码举例
search_jq = "$('#kw').val('selenium')"
button_jq = "$('.s_btn').click()"
driver.execute_script(search_jq)
driver.execute_script(button_jq)