windows下selenium的用法

WebDriver 元素

定位方式

1. id
2. name
3. class_name
4. tag_name
5. link_text
6. partial_link_text
7. xpath
8. css定位

以百度为例:

import time

import selenium
from selenium import webdriver

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
elem=driver.find_element_by_id("kw")
# elem=driver.find_element_by_name('wd')
#elem = driver.find_element_by_tag_name('input')  #如果有多个同名标签,则返回第一个
elem.send_keys("疫情")   #输入搜索的关键词
time.sleep(3)
elem.send_keys(selenium.webdriver.common.keys.Keys.RETURN)  #RETURN   键盘enter键
time.sleep(3)
driver.close()

link_text/partial_link_text

#coding:utf-8
import time

import selenium
from selenium import webdriver

driver =webdriver.Chrome()
driver.get("https://www.baidu.com/") #打开指定网页,在get括号后面加入url
time.sleep(2) #使用时间包,休眠2s
driver.find_element_by_link_text("新闻").click() #精确匹配超链接载体
# bro.find_element_by_partial_link_text("闻").click()#模糊匹配超链接载体
time.sleep(2)
driver.quit()

xpath定位

定位方式

用法:
1. /(绝对路径,从根节点选取) 
2. //(相对路径,所有子代节点,不用考虑是否直接子节点) 
3. @ 选取属性 
4..”选取当前节点 
5...”选取当前节点的父节点
6. nodename 选取此节点的所有子节点

通过属性定位

写法概括
属性判断条件:最常见为id,name,class等等,属性的类别没有特殊限制,只要能够唯一标识一个元素即可。
xpath = "//标签名[@属性='属性值']
当某个属性不足以唯一区别某一个元素时,也可以采取多个条件组合的方式,如下:
xpath= "//input[@type='XX' and @name='XX']"
利用contains()方法定位,也叫模糊定位
xpath = "//标签名[contains(@属性, '属性值')]"
示例代码:
import time

import selenium
from selenium import webdriver

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
#id,name,class用法一致,这里以id为例
# elem = driver.find_element_by_xpath('//input[@id = "kw"]')  #必须要加//代表相对路径
elem = driver.find_element_by_xpath('//*[@id = "kw"]')  #必须要加//代表相对路径,/代表绝对路径,一般使用相对路径
"""elem = driver.find_elements_by_xpath('//div[contains(@class,"s_tab")]')  #取div标签下所有class=s_tab的
print(elem)
输出元素对象结果:[<selenium.webdriver.remote.webelement.WebElement (session="cadc1fbb03cacc2b8080889b3c169728", element="48b912b1-3f7b-4383-9045-56985d83a3f1")>, <selenium.webdriver.remote.webelement.WebElement (session="cadc1fbb03cacc2b8080889b3c169728", element="b2170a65-3eaa-4383-93f0-fefdf956edfd")>]
"""
elem.send_keys("疫情")   #输入搜索的关键词

time.sleep(3)
elem.send_keys(selenium.webdriver.common.keys.Keys.RETURN)  #RETURN   键盘enter键
time.sleep(3)
driver.close()

利用text()方法定位

在这里插入图片描述

写法概括
xpath = "//a[text()='新闻']"
示例:
import time
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
elem = driver.find_element_by_xpath('//a[text()="新闻"]')
elem.click()
time.sleep(3)
driver.close()

PS:如果一个元素无法通过自身属性直接定位到,则可以先定位它的父(或父的父,它爷爷)元素,然后再找下一级即可

例如定位百度搜索框,可以按照此种方式试验一下(主要是看一下这个思路)

在这里插入图片描述

import time

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
xpath = "//a[text()='上一步']"
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('python')
time.sleep(3)
driver.close()
定位百度一下按钮

在这里插入图片描述

import time

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
#错误写法
"""driver.find_element_by_xpath("//form[@id='form']/span[@id='s_btn_wr']/input").click()   # 报错 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//form[@id='form']/span[@id='s_btn_wr']/input"}
原因是:因为在实际中发现通过webdriver打开的浏览器网页中<span>标签没有id属性了"""
#正确写法
driver.find_element_by_xpath("//form[@id='form']/span[@class='bg s_btn_wr']/input").click()
time.sleep(3)
driver.close()

注意:在第二步定位元素时,没有用的id属性,因为在实际中发现通过webdriver打开的浏览器网页中标签没有id属性了(所以选用标签的class属性,并且通过contains()模糊定位),如下图所示:
在这里插入图片描述

xpath轴

xpath相关内容概述

w3cschool上的定义如下:
在这里插入图片描述
语法
在这里插入图片描述

descendant表示取当前节点的所有后代元素

代码示例

在这里插入图片描述

import time

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_xpath("//form[@id='form']/descendant::input[@id='su']") .click()#必须要加//代表相对路径
driver.close()
验证路径正确性:

在这里插入图片描述

following表示选取当前节点结束标签之后的所有节点

注意这里说的是“结束标签之后”,所以在用这个轴进行定位时要看清目标标签的与辅助定位标签的层级关系

所以上例中就不能通过标签结合following来定位,因为标签在标签里面;

分析一下:标签的上级是一个标签,这个标签上面也有一个标签,可以通过它来定位
在这里插入图片描述

xpath= "//span[@id='s_kw_wrap']/following::input[@id='su']"
//span[@id='s_kw_wrap']表示定位到id属性为s_kw_wrap的<span>标签,/following::input[@id='su']表示找到<span>结束标签(</span>)后的所有input标签,然后通过[@id='su']精准定位到id属性为'su'<input>标签

(3)parent::可指定要查找的当前节点的直接父节点,例如,父节点是个div,即可写成parent::div,如果要找的元素不是直接父元素,则不可使用parent,可使用ancestor,代表父辈、祖父辈等节点;

child::表示直接子节点元素

following-sibling只会标识出当前节点结束标签之后的兄弟节点,而不包含其他子节点
在这里插入图片描述
代码示例:

1.xpath = //span[@class = 'title' and text()='换肤']/parent::a/following-sibling::a/child::span[@class='title' and text()='消息']
2.xpath = //span[@class = 'title' and text()='换肤']/parent::a/following-sibling::a[1]/span[2]

CSS定位

常用策略 (方式)

1. id选择器
2. class选择器
3. 元素选择器
4. 属性选择器
5. 层级选择器

ID选择器

说明:根据元素id属性来选择
格式:#id      如:#userA    <选择id属性值为userA的所有元素>

class 选择器

说明:根据元素class属性来选择
格式:.class 如:.telA <选择class属性值为telA的所有元素>

元素选择器

说明:根据元素的标签名选择
格式:element 如:input <选择所有input元素>

属性选择器

说明:根据元素的属性名和值来选择
格式:[attribute=value] 如:[type="password"] <选择所有type属性值为password的值>
补充:

input[type^='p'] 说明:type属性以p字母开头的元素
input[type$='d'] 说明:type属性以d字母结束的元素
input[type*='w'] 说明:type属性包含w字母的元素
input[type~='value'] 说明: type属性包含value的元素
input[type=value] 说明: type属性是value的所有元素

层级选择器

说明:根据元素的父子关系来选择
格式:element>element 如:p>input <返回所有p元素下所有的input元素>
提示:> 可以用空格代替 如:p input 或者 p [type='password']

代码示例

在这里插入图片描述

import time

import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By

driver =webdriver.Chrome()
driver.maximize_window()  #最大化窗口
driver.get("http://www.baidu.com")
driver.implicitly_wait(8)  #隐式等待
elem = driver.find_element_by_xpath('//input[@id = "kw"]').send_keys("疫情")  #必须要加//代表相对路径
time.sleep(3)
elem.send_keys(selenium.webdriver.common.keys.Keys.RETURN)  #RETURN   键盘enter键

time.sleep(3)

jump=driver.find_elements_by_css_selector('div.c-border a')   #该div标签下的所有的a标签元素对象结果
# print(c)
# #可以循环获取每一个元素对象结果
# # for i in range(len(jump)):
# #     print(jump[i].click())
jump[0].click()
driver.close()

XPath与CSS类似功能对比

定位方式XPathCSS
元素名//inputinput
id//input[@id=‘userA’]#userA
class//*[@class=‘telA’].telA
属性1. //[text()=“xxx”]
2. //
[starts-with(@attribute,‘xxx’)]
3. //*[contains(@attribute,‘xxx’)]
1. input[type^=‘p’]
2. input[type$=‘d’] 3. input[type*=‘w’]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值