XPath和Selenium的使用

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

/:  ——># 从根节点选取:

//: ——># 不管位置,直接找

/@属性名     ——># 获取对应属性值

/text()     ——># 获取文本内容

使用方式:

from lxml import etree

html = etree.HTML(html_doc)     # html_doc 指的是HTML文档内容

1.所有节点
html.xpath('//*')

2.指定节点
html.xpath('//head')

3.子节点,子孙节点
html.xpath('//body/a')
html.xpath('//body//a')

4.父节点
html.xpath('//body//a[@href="image.html"]/..')

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

6.文本获取
html.xpath('//body//a[@href="image.html"]/text()')

7.获取属性
html.xpath('//body//a/@href')

8.属性多值匹配
html.xpath('//body//a[contains(@class,"li")]/text()')

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

10.按序匹配(从1开始)
html.xpath('//a[2]/text()')

Selenium 是为了解决 requests 无法直接执行 JavaScript 代码的问题。

本质是通过驱动浏览器,完全模拟浏览器的操作,输入、点击、下拉等。

安装: pip install selenium

并且驱动要跟浏览器版本对应

简单使用模拟百度搜索:

import time

from selenium import webdriver

bro = webdriver.Chrome(executable_path='./chromedriver.exe')  # 得到一个谷歌浏览器对象,并指定使用那个驱动

bro.implicitly_wait(5)  # 隐士等待:找一个控件,如果控件没有加载出来,就等待5S,只需要写着一句,以后所有控件都按照这个操作来

bro.get('https://www.baidu.com')  # 在地址栏里输入百度

input_k = bro.find_element_by_id('kw')  # 找到百度输入框对应的控件

input_k.send_keys('python')  # 框里面输入python

sou = bro.find_element_by_id('su')  # 找到搜索按钮

sou.click()  # 点击搜索按钮

time.sleep(3)

bro.close()  # 关闭浏览器

find选择器

Selenium 中有内置的选择器对 html 文件内容进行选择处理

选择方法:

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选择器

注意:
find_elements_by_xxx 的形式是查找到多个元素,结果为列表

使用方法示例:

from selenium import webdriver

bro = webdriver.Chrome(executable_path='./chromedriver.exe')

bro.implicitly_wait(5)

bro.get('https://www.cnblogs.com/XiaoYang-sir/p/15077518.html')

tag = bro.find_element_by_id('_label1')  # 找到id=_label1的标签
print(tag.text)  # 获取文本内容

bro.close()

其他操作:

tag.get_attribute('href')  # 找当前控件 的href属性对的值
tag.text        # 获取文本内容

tag.id          # 当前控件id号
tag.location    # 当前控件在页面位置
tag.tag_name    # 标签名
tag.size        # 标签的大小

bro.delete_all_cookies()    # 获取cookie

元素交互

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

执行 JS 代码

bro.execute_script('window.open()') # 打开浏览器后执行js代码

无界面浏览器

谷歌浏览器支持不打开页面进行操作

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()

Original: https://www.cnblogs.com/XiaoYang-sir/p/15173174.html
Author: Mr-Yang`
Title: XPath和Selenium的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591842/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 查看PostgreSQL监听端口

    如何查看PostgreSQL的监听端口呢?下面总结一下查看PostgreSQL监听端口的方法。 方法1:netstat命令查看 或者sudo netstat -plunt |gre…

    数据库 2023年6月11日
    087
  • css height属性中的calc方法

    例如父盒子是100%的高度 盒子里面的head部分固定位140px 内容部分始终为剩余的全部高度 height: calc(100% – 140px); “…

    数据库 2023年6月16日
    0135
  • MySQL8自增主键变化

    MySQL8自增主键变化 醉后不知天在水,满船清梦压星河。 一、简述 MySQL版本从5直接大跃进到8,相信MySQL8一定会有很多令人意想不到的改进,如果不想只会CRUD可以看看…

    数据库 2023年5月24日
    081
  • 3000帧动画图解MySQL为什么需要binlog、redo log和undo log

    全文建立在MySQL的存储引擎为InnoDB的基础上 先看一条SQL如何入库的: 这是一条很简单的更新SQL,从MySQL服务端接收到SQL到落盘,先后经过了MySQL Serve…

    数据库 2023年6月16日
    0124
  • Redis——数据操作(3)

    2022-09-22 (4)set操作 ①添加操作(sadd): 例: ②查看操作(smembers):例: ③移除操作(srem):例: (5)zset(有序集合而且里面的元素是…

    数据库 2023年6月14日
    0133
  • 强烈推荐一款优秀且通用的后台管理系统

    最近看到一款优秀的通用管理后台——likeadmin,推荐给大家。likeadmin的部署方式简单,界面美观,基于MIT协议,完全免费,非常值得一用。 likeadmin快速开发通…

    数据库 2023年6月14日
    094
  • 集合自序整理集

    集合和数组一样都是对多个数据进行存储操作的容器 * – 集合长度可变,数组长度固定 – 集合可以存储不同数据类型元素,数组只能存储单一数据类型元素 &#82…

    数据库 2023年6月9日
    0117
  • AQS源码探究之竞争锁资源

    AQS源码探究—竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平…

    数据库 2023年6月11日
    092
  • 自动补全、回滚!介绍一款可视化 sql 诊断利器

    Yearning简介 ================= Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度…

    数据库 2023年6月9日
    0126
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年6月16日
    089
  • Linux 利用Cgroup 资源控制

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 cgroups 是Linux内核…

    数据库 2023年5月24日
    0121
  • MySQL事务提交流程

    有binlog的CR方式(重点核心!!):有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog…

    数据库 2023年6月16日
    096
  • python爬虫—xpath基础教程

    XPath: XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找…

    数据库 2023年6月11日
    086
  • Mysql 的Innodb引擎和Myisam数据结构和区别

    先大体看一下MySQL的SQL layer层的一个架构流程: 简要介绍一些关键模块: [En] Give a brief description of some key modul…

    数据库 2023年5月24日
    099
  • MyBatisPlus代码生成示例

    一、依赖 com.baomidou mybatis-plus-generator 3.5.3 org.projectlombok lombok 1.18.16 compile or…

    数据库 2023年6月11日
    089
  • 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨。 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言。 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件…

    数据库 2023年6月11日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球