xpath选择器的使用 query选择器和xpath合用
import lxml.etree as etree # 1). 将html内容转化成xpath可以解析/匹配的格式; #html = """ #<!DOCTYPE html> #<html> #<head lang="en">...... selector = etree.HTML(html) str = selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') # 全文里搜索div标签-->筛选id = content的所有div标签--->再筛选出ul标签里id='ul'的标签---->li标签--->提取文字 # 输出的str为列表 print(str) print(type(str)) # str为列表类型
js中 xpath 使用
xpath的根据指定文本匹配和父兄元素
根据文本匹配
pyquery
# pyquery 根据包含的字符定位所属标签 doc("script:contains(美丽心情19840606)") >>> [<script>]
CSS
CSS 选择器参考手册
选择器 | 描述 |
---|---|
[attribute] | 用于选取带有指定属性的元素。 |
[attribute=value] | 用于选取带有指定属性和值的元素。 |
[attribute~=value] | 用于选取属性值中包含指定词汇的元素。 |
[attribute|=value] | 用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。 |
[attribute^=value] | 匹配属性值以指定值开头的每个元素。 |
[attribute$=value] | 匹配属性值以指定值结尾的每个元素。 |
[attribute*=value] | 匹配属性值中包含指定值的每个元素。 |
xpath
# 等于值 //a[text()="文本"] # 模糊匹配 //a[contains(text(),"文本")] # 根据属性值匹配
<a class="tb-gold-icon" title="金牌卖家" href="//www.taobao.com/go/act/jpmj.php" target="_blank"></a>
//a[contains(@title, "金牌卖家")]
其中的关键词 "金牌卖家" 为模糊匹配
模糊匹配。 ^:以什么开头 $:以什么结尾 *:匹配所有 find_element_by_css_selector("标签名[属性名*(或^,或$)='属性值']")
xpath兄弟节点 引用链接
![](https://img2020.cnblogs.com/blog/1370846/202012/1370846-20201222104241476-1843458434.png)
/following-sibling::*[1] 选择到了第一个元素后,再指定选取兄弟节点【第几个兄弟节点】
WebDriverWait(i,10).until(EC.presence_of_element_located((By.XPATH,'//span[contains(text(),"状态:")]/following-sibling::*[1]'))).text
查找兄弟标签
# 定位同级的下一个a标签 //a[text()="文本"]/following-sibling::a[1] # 定位同级的上一个a标签 //a[text()="文本"]/preceding-sibling::a[1] # 定位当前节点的父节点 //a[text()="文本"]/..
使用方法
根据文本匹配
document.evaluate('//span[contains(text(),"快递")]',document).iterateNext()
根据属性class匹配
document.evaluate('//*[@class="wl-servicetitle"]',document).iterateNext()
根据属性ID匹配
document.evaluate('//*[@id="J_WlServiceTitle"]',document).iterateNext()
定位同级的下一个a标签
document.evaluate('//span[contains(text(),"浙江")]/following-sibling::span[1]',document).iterateNext()
定位当前节点的父节点
document.evaluate('//span[contains(text(),"快递")]//../../..',document).iterateNext()
query选择器和xpath合用
>>> type(doc('#J_RateCounter')[0].xpath('//span')[0])
>>> <class 'lxml.html.HtmlElement'>
![](https://img2018.cnblogs.com/i-beta/1370846/202001/1370846-20200131190422064-1651288448.png)
query选择器根据属性A获取节点属性B的值
例如: 注意不能直接用
driver.find_element_by_xpath('//*[@id="branch_inquiry"]').find_element_by_class_name('city-picker-span')
用法
2、不是同一级的xpath 定位方法
driver.find_element_by_xpath("//input[@id='cityAddress1']/following-sibling::span").click()
3、由父节点定位子节点
4、由子节点定位父节点
5、由弟弟节点定位哥哥节点
6、由哥哥节点定位弟弟节点
7、其他Xapth定位方法