首先是包的导入

from selenium import webdriver

使用webdriver创建Chrome对象,这里要注意分为有界面浏览器Chrome和无界面浏览器phantomjs两种对象

driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64/chromedriver.exe')

这里Chrome驱动路径如果没配置环境变量的话需要用我这种方式executable_path指定。 配置环境变量的方式就是在我的电脑->属性->高级->环境变量,添加 图片说明 有了webdriver对象以后就可以进行相关操作

定位 图片说明

一、单一属性定位
type selector
  driver.find_element_by_css_selector('input') 

id 定位
  driver.find_element_by_css_selector('#kw')

class定位
  driver.find_element_by_css_selector('.s_ipt')

其他属性定位
  driver.find_element_by_css_selector('[name='wd']')

  driver.find_element_by_css_selector([type='text'])

二、组合属性定位
id组合属性定位
  driver.find_element_by_css_selector("input#kw")

class组合属性定位
  driver.find_element_by_css_selector("input.s_ipt")

其他属性组合定位
  driver.find_element_by_css_selector("input[name='wd']")

仅有属性名,没值也可以
  driver.find_element_by_css_selector("input[name]")

两个其他属性组合定位
  driver.find_element_by_css_selector("[name='wd'][autocomplete='off']")

模糊匹配属性值方法
   1>属性值由多个空格隔开,匹配其中一个值的方法

  driver.find_element_by_css_selector("input[class~='btn']")

  2>匹配属性值为字符串开头的方法

  driver.find_element_by_css_selector("input[class^='btn']")

  3>匹配属性值字符串结尾的方法

  driver.find_element_by_css_selector("input[class$='s_btn']")
   4>匹配被-分割的属性值的方法,如上图的class

  driver.find_element_by_css_selector("input[class|='s']")  #要求精确填写的属性值
三、层次定位
    1:E>F    E下面的F这个元素

    driver.find_element_by_css_selector('from#form>span>input')#id是form的form下面的span下面的input

    2:E:nth-child(n)  如上图,

    driver.find_element_by_css_selector('#u_sp > a:nth-child(1)')#id为u_sp的下面的第一个a标签。

    3:E:nth-last-child(n),如字面意思:倒数第几个标签

    4:E:first-child,第一个标签

    5:E:last-child,最后一个标签

    6:E:only-child,唯一的标签

值得注意的是,这样只能操作一个标签页,即使点击跳转以后,也还是只能操作之前的标签页。如果想操作跳转后的标签页那就要更改句柄。

//切换标签页handles
handles = driver.window_handles//请求当前页面所有的标签页
driver.switch_to.window(handles[1])

window里面的参数是handles的索引。为了防止标签页过多,导致句柄过多,所以每次切换页面后不需要原来的页面则优先关闭旧页面。