我们继续来讲下页面对象的定位方法,本文主要讲css_selector的定位方法。那么讲css_selector其实和xpath一样,因为很多时候我们要定位的页面对象会没有id、name、class等属性,甚至也无法通过link text的方法定位,所以我们就需要用到css_selector,css_selector对于所有的对象定位都是适用的!1、find_element_by_css_selectorcss_selector定位其实和xpath是类似的,只是写法有一些差异而已,它也有绝对路径和相对路径的定位方法。1)绝对路径绝对路径也是从html根节点开始查找起,
那么我要定位这个输入框css的绝对路径写法如下:一般用两种,第一种(用>来分割层级):
- html>body>div>div>div>form>table>tbody>tr>td>input
复制代码第二种(用空格来分割层级):
- html body div div div form table tbody tr td input
复制代码具体代码实现如下:
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get("http://www.bcbxhome.com")
- time.sleep(5)
- driver.find_element_by_css_selector("html>body>div>div>div>form>table>tbody>tr>td>input")
- driver.find_element_by_css_selector("html body div div div form table tbody tr td input").click()
复制代码2)相对路径比如我们可以看到要定位的输入框是有id的,我们可以直接写标签名称#id属性值
- input#scbar_txt
复制代码那么代码实现:
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get("http://www.bcbxhome.com")
- time.sleep(5)
- driver.find_element_by_css_selector("input#scbar_txt")
复制代码当然你也可以只写#id属性值,不写标签名称,如下:
- #scbar_txt
复制代码如果要定位的控件有class,我们可以直接写标签名称.class属性值
- input.xg1
复制代码那么代码实现:
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get("http://www.bcbxhome.com")
- time.sleep(5)
- driver.find_element_by_css_selector("input.xg1")
复制代码如果要定位的控件既没有id也没有class,那么我们可以通过其他属性定位,方法如下:
- input[name='srchtxt']
复制代码如果一个属性无法唯一确定到此控件,可以通过多个控件组合定位:
- input[value='请输入搜索内容'][type='text']
复制代码当然你要定的控件没有办法直接通过自身的属性定位,可以先定位父级,然后从父级定位到它!
比如要定位input,我们可以先定位到form然后就可以定位到input了
- form#scbar_form>table>tbody>tr>td>input
复制代码当然因为tr下有多个td我们也可以通过nth-child加索引定位到第二个td
- form#scbar_form>table>tbody>tr>td:nth-child(2)>input
复制代码代码实现就非常简单了:
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get("http://www.bcbxhome.com")
- time.sleep(5)
- driver.find_element_by_css_selector("form#scbar_form>table>tbody>tr>td:nth-child(2)>input")
复制代码