[ tool ] Xpath选择器和selenium工具基本使用

这篇具有很好参考价值的文章主要介绍了[ tool ] Xpath选择器和selenium工具基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 XPath

xpath介绍

是一门在XML文档中查找信息的语言

html文档准备

doc='''
<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html' aa='bb'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html' class='li li-item' name='items'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
   <a href='image6.html' name='items'><span><h5>test</h5></span>Name: My image 6 <br /><img src='image6_thumb.jpg' /></a>
  </div>
 </body>
</html>
'''

xpath选择器使用

from lxml import etree

html=etree.HTML(doc)
html=etree.parse('search.html',etree.HTMLParser())
1 所有节点
a=html.xpath('//*')

2 指定节点(结果为列表)
a=html.xpath('//head')

3 子节点,子孙节点
a=html.xpath('//div/a')
a=html.xpath('//body/a') #无数据
a=html.xpath('//body//a')

4 父节点
a=html.xpath('//body//a[@href="image1.html"]/..')
a=html.xpath('//body//a[1]/..')
也可以这样
a=html.xpath('//body//a[1]/parent::*')

5 属性匹配
a=html.xpath('//body//a[@href="image1.html"]')

6 文本获取(重要)  /text() 取当前标签的文本
a=html.xpath('//body//a[@href="image1.html"]/text()')
a=html.xpath('//body//a/text()')

7 属性获取  @href 取当前标签的属性
a=html.xpath('//body//a/@href')

# 注意从1 开始取(不是从0)
a=html.xpath('//body//a[1]/@href')

8 属性多值匹配
a 标签有多个class类,直接匹配就不可以了,需要用contains
a=html.xpath('//body//a[@class="li"]')				# 标签有且只有一个时才能找到,否则None
a=html.xpath('//body//a[contains(@class,"li")]')	 # 只要包含就可以
a=html.xpath('//body//a[contains(@class,"li")]/text()')

9 多属性匹配
a=html.xpath('//body//a[contains(@class,"li") or @name="items"]')
a=html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
a=html.xpath('//body//a[contains(@class,"li")]/text()')

10 按序选择
a=html.xpath('//a[2]/text()')
a=html.xpath('//a[2]/@href')
取最后一个
a=html.xpath('//a[last()]/@href')
位置小于3的
a=html.xpath('//a[position()<3]/@href')
倒数第二个
a=html.xpath('//a[last()-2]/@href')

11 节点轴选择
ancestor:祖先节点
使用了* 获取所有祖先节点
a=html.xpath('//a/ancestor::*')
# 获取祖先节点中的div
a=html.xpath('//a/ancestor::div')
attribute:属性值
a=html.xpath('//a[1]/attribute::*')
a=html.xpath('//a[1]/@aa')
child:直接子节点
a=html.xpath('//a[1]/child::*')
a=html.xpath('//a[1]/child::img/@src')
descendant:所有子孙节点
a=html.xpath('//a[6]/descendant::*')
a=html.xpath('//a[6]/descendant::h5/text()')
following:当前节点之后所有节点(兄弟节点和兄弟内部的节点)
a=html.xpath('//a[1]/following::*')
a=html.xpath('//a[1]/following::*[1]/@href')
following-sibling:当前节点之后同级节点(只找兄弟)
a=html.xpath('//a[1]/following-sibling::*')
a=html.xpath('//a[1]/following-sibling::a')
a=html.xpath('//a[1]/following-sibling::*[2]')
a=html.xpath('//a[1]/following-sibling::*[2]/@href')

Xpath重点总结

1. //:代表从整篇文档中寻找
   例如://body,代表在整篇文档中寻找所有的body标签
2. /:代表从当前节点中寻找
   例如://body/a,在所有的body标签下寻找a标签
3. /@属性名:获取当前标签的属性
	例如://div/a/@href,在所有的div标签下寻找a标签得到a标签的href属性值
4. /text():获取当前标签的文本
	例如://body//a[@href="image1.html"]/text(),在所有的body标签下寻找href属性是image1.html的a标签的文本
  • 以后查找标签有三种方式

  • bs4的find系列(find & find_all)
  • css选择器
  • xpath选择器

selenium工具

介绍

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

安装

pip install selenium

使用

下载浏览器驱动

selenium工具在使用的时候需要借助浏览器驱动

浏览器驱动下载:npm.taobao.org/mirrors/chr…

驱动要和浏览器版本对应:

[ tool ] Xpath选择器和selenium工具基本使用,软件测试,selenium,测试工具,功能测试,软件测试,自动化测试,程序人生,职场和发展

根据不同的操作系统下载不同的文件,解压之后就是不同平台的可执行文件

[ tool ] Xpath选择器和selenium工具基本使用,软件测试,selenium,测试工具,功能测试,软件测试,自动化测试,程序人生,职场和发展

selenium工具使用

  • 基本使用
from selenium import webdriver
import time


# 首先得到一个谷歌浏览器对象,并指定使用浏览器驱动(这里我的驱动放在与执行文件相同的文件夹下)
browser = webdriver.Chrome(executable_path='./chromedriver.exe')
time.sleep(2)

# 相当于在地址栏中输入百度
browser.get('https://www.baidu.com/')
time.sleep(2)

print(browser.page_source) # page_source包括js的前端源码
time.sleep(2)

# 关闭浏览器:用完之后一定要关闭,如果不关闭的话,不断地开新的程序就会不断地开启谷歌浏览器的进程,导致内存被撑爆,而且谷歌浏览器的每个标签页都是开启一个进程
browser.close()
  • 模拟登陆百度
from selenium import webdriver
import time

# 1.得到谷歌浏览器对象
browser = webdriver.Chrome(executable_path='./chromedriver.exe')
# 2.在地址栏中输入百度的网址
browser.get('https://www.baidu.com/')
time.sleep(0.1)
# 3.获取输入框,通过id获取输入框表标签对象
input_k = browser.find_element_by_id('kw')
# 4.在输入框中写入'蜡笔小新',可以直接模拟键盘的回车键
input_k.send_keys('蜡笔小新')
# 模拟键盘输入
# from selenium.webdriver.common.keys import Keys
# input_k.send_keys(Keys.ENTER)  # 如果模拟键盘的回车键,后续就不需要点击搜索按钮

time.sleep(2)
# 5.找到搜索按钮
button = browser.find_element_by_id('su')
# 6.点击搜索按钮,或者模拟键盘的回车键
button.click()
time.sleep(10)
# 关闭浏览器
browser.close()

等待页面元素被加载

有时候在使用selenium工具的时候,由于等待时间非常短页面中的组件还未加载完毕,可能会出现报错的情况,因此可以设置一个等待页面元素加载的时间。

页面元素加载等待分为隐式等待和显式等待

  • 隐式等待(推荐使用)
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
# 隐式等待:需要写在get('url')之前,针对所有元素,找一个空间,如果没有加载出来就等待5s
bro.implicitly_wait(5)
bro.get('https://www.baidu.com/')
  • 显式等待
加载每个控件都需要手动睡几秒(time.sleep(5)),不方便,不推荐使用

选择器

1、find_element_by_id   # 通过id查找控件
2、find_element_by_link_text  # 通过a标签内容找
3、find_element_by_partial_link_text  # 通过a标签内容找,模糊匹配
4、find_element_by_tag_name   # 标签名
5、find_element_by_class_name  # 类名
6、find_element_by_name      # name属性
7、find_element_by_css_selector  # 通过css选择器
8、find_element_by_xpath       # 通过xpaht选择器
========================强调==============================
9、find_elements_by_xxx的形式是查找到多个元素,结果为列表

获取标签属性

  • 重要
tag.get_attribute('href')  # 找当前控件 的href属性对的值
tag.text   # 获取文本内容
  • 了解
print(tag.id)   # 当前控件id号
print(tag.location)  # 当前控件在页面位置
print(tag.tag_name)  # 标签名
print(tag.size)      #标签的大小

浏览器有无界面

  • 有界面浏览器

参考上面模拟在百度搜素蜡笔小新

  • 无界面浏览器

谷歌浏览器支持不打开页面

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度


chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败


bro=webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe')
bro.get('https://www.baidu.com/')
print(bro.page_source)
bro.close()

元素交互

tag.send_keys()  # 往里面写内容
tag.click()      # 点击控件
tag.clear()      # 清空控件内容

执行js

try:
    browser=webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.execute_script('alert("hello world")') #打印警告
finally:
    browser.close()
    
# 如何把屏幕拉到最后(js控制)
bro.execute_script('window.scrollTo(0,document.body.offsetHeight)')

模拟浏览器的前进后退

import time
from selenium import webdriver

browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('http://www.sina.com.cn/')

browser.back()
time.sleep(10)
browser.forward()
browser.close()

模拟键盘输入

# 模拟键盘输入
from selenium.webdriver.common.keys import Keys
input_k.send_keys('小新')
# 模拟键盘的回车键
input_k.send_keys(Keys.ENTER)

获取cookie

from selenium import webdriver

browser=webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')

# 获取所有cookies
print(browser.get_cookies())

# 获取指定cookie
print(browser.get_cookie(name))

# 增加cookie
browser.add_cookie({'k1':'xxx','k2':'yyy'})
print(browser.get_cookies())

异常处理

from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException
browser=webdriver.Chrome()
try:
    browser.get('')
except Exception as e:
    print(e)
finally:
    # 无论是否出异常,最终都要关掉
    browser.close()

动作链

动作链就是一连串动作,即鼠标执行的一系列动作。

用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains

"""
# 核心方法
ActionChains(driver).click_and_hold(sourse)
ActionChains(driver).move_by_offset  :移动x轴和y轴的拒绝
ActionChains(driver).move_to_element() :直接移动到某个控件是上
ActionChains(driver).move_to_element_with_offset() #移动到某个控件的某个位置
ActionChains(driver).release()
# 所有的动作最后都要执行perform(),真正的去执行
"""

# 示例:http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
from selenium import webdriver
from selenium.webdriver import ActionChains
import time

driver = webdriver.Chrome(executable_path='./chromedriver.exe')
driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
driver.implicitly_wait(3)  # 使用隐式等待

try:
    driver.switch_to.frame('iframeResult') ##切换到iframeResult
    sourse=driver.find_element_by_id('draggable')
    target=driver.find_element_by_id('droppable')
    ActionChains(driver).click_and_hold(sourse).perform()
    distance=target.location['x']-sourse.location['x']

    track=0
    while track < distance:
        ActionChains(driver).move_by_offset(xoffset=20,yoffset=0).perform()
        track+=20
        
    # 释放动作链
    ActionChains(driver).release().perform()
    time.sleep(10)

finally:
    driver.close()

选项卡

切换选项卡,有js的方式windows.open,有windows快捷键:ctrl+t等,最通用的就是js的方式

import time
from selenium import webdriver

browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')

print(browser.window_handles) #获取所有的选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(10)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://www.sina.com.cn')
browser.close()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

[ tool ] Xpath选择器和selenium工具基本使用,软件测试,selenium,测试工具,功能测试,软件测试,自动化测试,程序人生,职场和发展

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

[ tool ] Xpath选择器和selenium工具基本使用,软件测试,selenium,测试工具,功能测试,软件测试,自动化测试,程序人生,职场和发展文章来源地址https://www.toymoban.com/news/detail-811824.html

到了这里,关于[ tool ] Xpath选择器和selenium工具基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium 学习(0.18)——软件测试之基本路径测试

            是一种白盒测试方法,它在程序控制流图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。         要保证在测试中程序的每一个可执行语句至少执行一次         【这和语句覆盖区别在哪里呢? 】     

    2024年02月03日
    浏览(51)
  • 软件测试/测试开发丨Selenium Web自动化测试基本操作

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26901 模拟功能测试中对浏览器的操作 get方法打开浏览器 refresh方法刷新页面 用back方法回退到上一个界面 maximize_window方法使窗口最大化 minimize_window方法使窗口最小化 标签: a 属性:href 类属性

    2024年02月10日
    浏览(58)
  • Selenium使用xpath定位元素

    参考资料: 【web自动化测试】xpath元素定位 接下来是使用 xpath 必须掌握的核心知识点,只要掌握好这些知识点,基本上能定义到想要的元素。 // 开头表示相对路径, 也可以用 / 开头表示绝对路径,一般用相对路径。 [] 内表示属性条件 [@name=‘accout’] 表示获取name属性等于

    2023年04月08日
    浏览(53)
  • selenium XPATH 使用简单例子

    定位所有的 a 元素: //a 定位带有特定id属性的元素: //*[@id=“exampleId”] 定位带有特定class属性的元素: //*[contains(@class, “exampleClass”)] 定位包含特定文本的元素: //*[text()=“Example Text”] 定位包含特定部分文本的元素: //*[contains(text(), “Partial Text”)] 定位第一个 元素: /

    2024年02月21日
    浏览(45)
  • python selenium的xpath的使用

    2024年02月12日
    浏览(42)
  • 自动化测试工具 —— selenium介绍及基本使用方法

    Selenium是一个开源、免费、简单、灵活,对Web浏览器支持良好的自动化测试工具,在UI自动化、爬虫等场景下是十分实用的,能够熟练掌握并使用Selenium工具可以大大的提高效率。 Selenium简介 Selenium支持多平台、多浏览器、多语言去实现自动化测试,是一个开源和可移植的Web测

    2024年02月05日
    浏览(69)
  • 网络爬虫(二)——Xpath和Selenium的使用

    虽然正则表达式处理字符串的能力很强,但是在编写正则表达式的时候代码还是比较麻烦的,如果不小心写错一处,那么将无法匹配页面中所需要的数据,因为网页中包含大量的节点,而节点中又包含id、class等属性。如果在解析页面中的数据时,通过Xpath来定位网页中的数据

    2024年02月03日
    浏览(44)
  • python+selenium使用xpath定位的问题

    python用selenium调chrome爬取网页信息遇到报错: 1.InvalidSelectorException: Message: invalid selector: The result of the xpath expression is [object Attr]. It should be an element 原因是selenium不支持从xpath中直接获取text文本信息。 xpath表达式修改为: 2.Message: no such element: Unable to locate element: xpath表达式一直

    2024年02月12日
    浏览(44)
  • selenium使用XPATH提取内容报错(已解决)

    目录 一、说明 1.1、前言 1.2、报错信息 1.3、报错代码 二、解决 2.1、搜索引擎解决 2.2、最终解决 背景:使用selenium,获取招工平台岗位要求与待遇信息出现报错 环境:windows 10家庭版 语言:python 3 模块:selenium 出现的问题: selenium.common.exceptions.StaleElementReferenceException: Messa

    2024年02月09日
    浏览(38)
  • selenium其他操作/xpath使用/动作链/打码平台

    # 页面中定位元素(标签),两种通用方式     -css选择器     -xpath:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言           # xpath语法     div    选取div标签     /    从根节点选取     //    从匹配选择的当前节点选择文档中的节

    2024年02月15日
    浏览(564)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包