首先是包的导入
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的索引。为了防止标签页过多,导致句柄过多,所以每次切换页面后不需要原来的页面则优先关闭旧页面。