Loading

XPath和Selenium的使用

一、xpath选择器

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

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

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

安装:pip install selenium

使用需要下载浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/

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

简单使用模拟百度搜索:

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()
posted @ 2021-08-22 18:54  Mr-Yang`  阅读(247)  评论(0编辑  收藏  举报