【无标题】

根据 id属性 选择元素
element = wd.find_element(By.ID, ‘kw’)
对象来操控浏览器
wd = webdriver.Chrome()
WebElement 对象
页面元素 的遥控器,操控 对应的界面元素。
根据 class属性 选择元素
wd.find_elements(By.CLASS_NAME, ‘animal’)
find_element 和 find_elements 的区别
使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表
使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常

element.text
WebElement对象的 text 属性
根据 tag 名 选择元素
elements = wd.find_elements(By.TAG_NAME, ‘div’)
wd.implicitly_wait(10)
可以称之为 隐式等待 ,或者 全局等待 。当发现元素没有找到的时候, 并不立即返回 找不到元素的错误。而是周期性(每隔半秒钟)重新寻找该元素,直到该元素找到,或者超出指定最大等待时长,这时才 抛出异常(如果是 find_elements 之类的方法, 则是返回空列表)。
点击元素
WebElement对象的 click方法
输入框
WebElement对象的send_keys方法
获取元素信息
WebElement对象的 text 属性
获取元素属性
WebElement对象的 get_attribute 方法来获取元素的属性值 element.get_attribute(‘class’)
获取整个元素对应的HTML
element.get_attribute(‘outerHTML’)
获取某个元素 内部 的HTML文本内容
element.get_attribute(‘innerHTML’)
获取输入框里面的文字
element.get_attribute(‘value’)
CSS Selector 同样可以根据tag名、id 属性和 class属性 来 选择元素
elements = wd.find_elements(By.CSS_SELECTOR, ‘div’)
等价于
elements = wd.find_elements(By.TAG_NAME, ‘div’)
element = wd.find_element(By.CSS_SELECTOR, ‘#searchtext’)
elements = wd.find_elements(By.CLASS_NAME, ‘animal’)
还可以这样写
elements = wd.find_elements(By.CSS_SELECTOR, ‘.animal’)
选择 子元素 和 后代元素
直接子元素 >表示 如果 元素2 是 元素1 的 直接子元素 元素1 > 元素2
后代元素 用空格表示 如果 元素2 是 元素1 的 后代元素 元素1 元素2
根据属性选择
element = wd.find_element(By.CSS_SELECTOR, ‘[href=“http://www.miitbeian.gov.cn”]’)
CSS 还可以选择 属性值 包含 某个字符串 的元素
a[href*=“miitbeian”]
选择 属性值 以某个字符串 开头 的元素
a[href^=“http”]
选择 属性值 以某个字符串 结尾 的元素
a[href$=“gov.cn”]
选择语法联合使用
div.footer1 > span.copyright TAG和Class联合使用
.footer1 > .copyright
.footer1 .copyright
组选择 逗号
.plant , .animal 同时选择所有class 为 plant 和 class 为 animal 的元素
div,#BYHY 所有tag名为div的元素 和 id为BYHY的元素
按次序选择子节点
父元素的第n个子节点
选择的是 第2个子元素,并且是span类型
span:nth-child(2) ,
父元素的倒数第n个子节点
父元素的 倒数第几个子节点 ,使用 nth-last-child
p:nth-last-child(1)
就是选择第倒数第1个子元素,并且是p元素
父元素的第几个某类型的子节点
选择的是 第1个span类型 的子元素 span:nth-of-type(1)
父元素的倒数第几个某类型的子节点
p:nth-last-of-type(2)
奇数节点和偶数节点
父元素的 偶数节点,使用 nth-child(even) p:nth-child(even)
父元素的 奇数节点,使用 nth-child(odd) p:nth-child(odd)
如果要选择的是父元素的 某类型偶数节点,使用 nth-of-type(even)
如果要选择的是父元素的 某类型奇数节点,使用 nth-of-type(odd)
相邻兄弟节点选择
选择 h3 后面紧跟着的兄弟节点 span。 h3 + span
后续所有兄弟节点选择
选择 h3 后面所有的兄弟节点 span,可以这样写 h3 ~ span
切换到frame
WebDriver 对象的 switch_to 属性
wd.switch_to.frame(frame_reference) frame_reference可以是 frame 元素的属性 name 或者 ID 。
wd.switch_to.frame(wd.find_element(By.TAG_NAME, “iframe”))
切换回原来的主html
wd.switch_to.default_content()
切换到新的窗口
wd.switch_to.window(handle)
for handle in wd.window_handles:

先切换到该窗口

wd.switch_to.window(handle)

得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口

if ‘Bing’ in wd.title:

如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,

break
回到原来的窗口

mainWindow变量保存当前窗口的句柄

mainWindow = wd.current_window_handle
#通过前面保存的老窗口的句柄,自己切换到老窗口 wd.switch_to.window(mainWindow)
radio框
checkbox框
必须 先获取当前该复选框的状态 ,如果该选项已经勾选了,就不能再点击。否则反而会取消选择。
我们的思路可以是这样:
• 先把 已经选中的选项全部点击一下,确保都是未选状态
• 再点击 小雷老师
示例代码

先把 已经选中的选项全部点击一下

elements = wd.find_elements(By.CSS_SELECTOR,
‘#s_checkbox input[name=“teacher”]:checked’)

for element in elements:
element.click()

再点击 小雷老师

wd.find_element(By.CSS_SELECTOR,
“#s_checkbox input[value=‘小雷老师’]”).click()
select框
Select类 提供了如下的方法
• select_by_value
根据选项的 value属性值 ,选择元素。
比如,下面的HTML,

Bar 就可以根据 foo 这个值选择该选项, s.select_by_value('foo') • select_by_index 根据选项的 次序 (从1开始),选择元素 • select_by_visible_text 根据选项的 可见文本 ,选择元素。 比如,下面的HTML, Bar 就可以根据 Bar 这个内容,选择该选项 s.select_by_visible_text('Bar') • deselect_by_value 根据选项的value属性值, 去除 选中元素 • deselect_by_index 根据选项的次序,去除 选中元素 • deselect_by_visible_text 根据选项的可见文本,去除 选中元素 • deselect_all 去除 选中所有元素 Select单选框 # 创建Select对象 select = Select(wd.find_element(By.ID, "ss_single")) # 通过 Select 对象选中小雷老师 select.select_by_visible_text("小雷老师") Select多选框 可以用select类 的deselect_all方法,清除所有 已经选中 的选项。 然后再通过 select_by_visible_text方法 选择 小雷老师 和 小凯老师。 # 导入Select类 from selenium.webdriver.support.ui import Select # 创建Select对象 select = Select(wd.find_element(By.ID, "ss_multi")) # 清除所有 已经选中 的选项 select.deselect_all() # 选择小雷老师 和 小凯老师 select.select_by_visible_text("小雷老师") select.select_by_visible_text("小凯老师") 通过 Selenium 提供的 ActionChains 类来实现。 鼠标右键点击、双击、移动鼠标到某个元素、鼠标拖拽等。 鼠标放在上边,就会弹出 下面的 糯米、音乐、图片 等图标。 ac.move_to_element( driver.find_element(By.CSS_SELECTOR, '[name="tj_briicon"]') ).perform() 冻结界面 在 开发者工具栏 console 里面执行如下js代码 setTimeout(function(){debugger}, 5000) 浏览器会进入debug状态。 debug状态有个特性, 界面被冻住, 不管我们怎么点击界面都不会触发事件。 弹出对话框 Alert 显示通知信息,只需用户看完信息后,点击 OK(确定) 就可以了。 driver.switch_to.alert.accept() OK 如果程序要获取弹出对话框中的信息内容, 可以通过 如下代码 driver.switch_to.alert.text 信息内容 Confirm 让用户确认是否要进行某个操作。 如果我们想点击 OK 按钮, 还是用刚才的 accept方法,如下 driver.switch_to.alert.accept() 如果我们想点击 Cancel 按钮, 可以用 dismiss方法,如下 driver.switch_to.alert.dismiss() Prompt 是需要用户输入一些信息,提交上去。 当管理员在网站上选择给某个账号延期时,就可能会弹出 Prompt 弹出框, 要求输入延期多长时间。 可以调用如下方法 driver.switch_to.alert.send_keys() 窗口大小 有时间我们需要获取窗口的属性和相应的信息,并对窗口进行控制 • 获取窗口大小 driver.get_window_size() • 改变窗口大小 driver.set_window_size(x, y) 获取当前窗口标题 WebDriver的title属性 driver.title 获取当前窗口URL地址 driver.current_url 截屏 浏览器屏幕内容保存为图片文件。 # 截屏保存为图片文件 driver.get_screenshot_as_file('1.png')

手机模式
我们可以通过 desired_capabilities 参数,指定以手机模式打开chrome浏览器
参考代码,如下
上传文件

先定位到上传文件的 input 元素 ele = wd.find_element(By.CSS_SELECTOR, ‘input[type=file]’) # 再调用 WebElement 对象的 send_keys 方法 ele.send_keys(r’h:\g02.png’)

绝对路径选择
elements = driver.find_elements(By.XPATH, “/html/body/div”)
相对路径选择
我们需要选择网页中某个元素, 不管它在什么位置 。
elements = driver.find_elements(By.XPATH, “//div//p”)
如果,要选择 所有的 div 元素里面的 直接子节点 p , xpath,就应该这样写了 //div/p
通配符
所有div节点的所有直接子节点,可以使用表达式 //div/*
elements = driver.find_elements(By.XPATH, "//div/")
根据属性选择
[@属性名=‘属性值’]
根据id属性选择
选择 id 为 west 的元素,可以这样 //
[@id=‘west’]
根据class属性选择
//select[@class=‘single_choice’] 单个
//p[@class=“capital huge-city”] 多个
根据其他属性
选择 具有multiple属性的所有页面元素 ,可以这样 //[@multiple]
属性值包含字符串
要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样 //
[contains(@style,‘color’)]
要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //[starts-with(@style,‘color’)]
按次序选择
某类型 第几个 子元素
选择 p类型第2个的子元素,就是
//p[2] p类型第2个的子元素 , 不是 第2个子元素,并且是p类型 。
第几个子元素
//div/
[2] 选择父元素为div的第2个子元素,不管是什么类型
某类型 倒数第几个 子元素
• 选取p类型倒数第1个子元素
//p[last()]
• 选取p类型倒数第2个子元素
//p[last()-1]
• 选择父元素为div中p类型倒数第3个子元素
//div/p[last()-2]
范围选择
• 选取option类型第1到2个子元素
//option[position()<=2]
或者
//option[position()❤️]
组选择
竖线 要选所有的option元素 和所有的 h4 元素,可以使用
//option | //h4
选择父节点
xpath可以选择父节点, 这是css做不到的。
某个元素的父节点用 /… 表示
要选择 id 为 china 的节点的父节点,可以这样写 //[@id=‘china’]/… 。
还可以继续找上层父节点,比如 //
[@id=‘china’]/…/…/…
兄弟节点选择
xpath也可以选择 后续 兄弟节点,用这样的语法 following-sibling:: path还可以选择 前面的 兄弟节点,用这样的语法 preceding-sibling::

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值