首页 > 其他分享 >xpath和contains模糊匹配

xpath和contains模糊匹配

时间:2024-03-23 15:56:50浏览次数:24  
标签:xpath 匹配 contains driver find input element id

来源:https://www.cnblogs.com/kaibindirver/p/12072546.html

最近在弄数据爬取,研究了下xpath,也参考了很多文章,这篇总结不错,就直接复制过来了。

xpath可以以标签定位,也可以@任意属性:

如:以input标签定位:driver.find_element_by_xpath("//input[@id='kw']")

如:@type属性:driver.find_elements_by_xpath("//input[@type='text']")

一、xpath定位

1、常规属性

1.通过id定位
driver.find_element_by_xpath("//*[@id='kw']").send_keys("hao")

2.通过tag(标签)定位
*号匹配任何标签:driver.find_element_by_xpath("//*[@id='kw']")

也可以指定标签名称:driver.find_element_by_xpath("//input[@id='kw']")

3.通过class定位
driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("hao")

4.通过name定位
driver.find_element_by_xpath("//input[@name='wd']").send_keys("hao")

 

2、其他属性

1.其它属性
driver.find_element_by_xpath("//input[@autocomplete='off']").send_keys("hao")

2.多个属性组合(逻辑运算)
driver.find_elements_by_xpath("//input[@type='text' and @name='wd']")

3.绝对路径:/html/body/xxx/xx[@id=‘kw’]

 4、层级关系

 

 

1.相对路径:层级关系
driver.find_element_by_xpath("//form[@id='form']/span/input")

如:

/代表绝对路径

 //代表相对路径

2.索引:如定位搜索选项框

 

 

driver.find_element_by_xpath("//*[@id='nr']/option[3]")

3.同一父级多个子元素

 如果同一父级下,有多个相同的子元素,下标从1开始:.//*[@id='u1']/a[2]
也可以这样:.//*[@id='u1']/a[@class="mnav"][1]

4、模糊匹配

1.contains模糊匹配text:contains
如,通过模糊匹配text属性,找到百度首页的“糯米”网站超链接
driver.find_element_by_xpath("//a[contains(text(),'糯')]").click()

 

2.模糊匹配某个属性:contains
xpath("//input[contains(@id,‘xx')]")
driver.find_element_by_xpath("//input[contains(@class,'s_ip')]").send_keys("hao")

 

3.模糊匹配以xx开头:starts-with
xpath("//input[starts-with(@id,‘xx') ]")
driver.find_element_by_xpath("//input[starts-with(@class,'s_ip')]").send_keys("hao")

5、文本属性

对于这种文本属性,语法:.//*[text()=‘文本内容’]
除了这个文本属性匹配是.//*[text()=‘文本’]这种格式(无@)
其它的属性,如id,name,class等都是.//*[@id=‘xxx’] .//*[@name=‘xxx’]这种格式

 

二、浏览器调试xpath

1.Firefox调试:无firePath的情况下,控制台下输入$x(xpath定位),回车

 

 2.Chrome调试:Console下输入$x(xpath定位),回车

三、table表格定位

1、定位表格

 

 Table表格固定格式:.//*[@id=‘表格id’]/tbody/tr[行数]/td[列数]/a
.//*[@id='bugList']/tbody/tr[6]/td[4]/a

2、参数化行和列
x = 6
y = 4
table = f".//*[@id='bugList']/tbody/tr[{x}]/td[{y}]/a"
driver.find_element_by_xpath(table).click()

3、根据表格标题定位后面的按钮

 

1.先通过bug的标题名称找到这一行
2.再找到这一行的父节点
3.通过父节点往下搜(编辑按钮都是固定位置)

text = "上传多个附件"
t = f'.//*[text()="{text}"]/../../td[@class="text-right"]/a[@title="编辑"]'
driver.find_element_by_xpath(t).click()

 

 

标签:xpath,匹配,contains,driver,find,input,element,id
From: https://www.cnblogs.com/huaan011/p/18091206

相关文章

  • nginx location匹配规则顺序总结
    Nginx的location匹配顺序是Nginx配置中非常核心且重要的概念,它决定了Nginx如何处理进入服务器的请求。理解location匹配顺序不仅有助于优化Nginx的性能,还能确保网站或应用的正确运行。下面将详细阐述Nginx的location匹配顺序,并通过实例加以说明。Nginxlocation匹配顺序详解精......
  • 【RedHat】重启服务器进入了emergency mode紧急状态——UUID不匹配
    启动redhat系统时出现emergencymode,处于紧急模式。并提示可以在登录root用户输入root用户密码后,通过journalctl-xb查看系统日志;systemctlreboot重启系统;systemctldefault或者exit进入默认模式。进入紧急模式的通常原因有两种:一种是/etc/fstab文件开机自动挂载的......
  • nginx localtion 匹配规则
    1、语法规则 语法规则:location[=|~|^~*|^~]/uri/{…}表示精确匹配,这个优先级也是最高的^~表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为/image/20%/aa,可以被规则^~/image//aa匹配到(注意是空格)。~表示区分......
  • 使用verillog编写KMP字符串匹配算法
    设计思路如下:定义模块的输入输出信号:包括时钟信号clk、复位信号rst、模式串pattern、文本串text以及输出信号match。定义所需寄存器和变量:使用寄存器来存储状态机的状态以及其他控制变量,如模式串数组P、失配函数数组F、模式串位置p_index、文本串位置t_index等。在时钟......
  • 28. 找出字符串中第一个匹配项的下标c
    voidbulid(int*next,char*s,intn){next[0]=-1;intindex=1,j=-1;while(index<n){if(j==-1||s[index-1]==s[j]){j++;next[index++]=j;}else{j=next[j];}}}intstrStr(c......
  • 在不知道相机内参的情况下,利用opencv库进行基于特征点匹配的极线校正
    defrectify_image(img1,img2):#初始化SIFT检测器sift=cv2.SIFT_create()#检测关键点和计算描述符kp1,des1=sift.detectAndCompute(img1,None)kp2,des2=sift.detectAndCompute(img2,None)#使用FLANN匹配器进行特征点匹配FLANN_INDEX_K......
  • 【工程应用九】再谈基于离散夹角余弦相似度指标的形状匹配优化(十六角度量化+指令集加
    继去年上半年一鼓作气研究了几种不同的模版匹配算法后,这个方面的工作基本停滞了有七八个月没有去碰了,因为感觉已经遇到了瓶颈,无论是速度还是效率方面,以当时的理解感觉都到了顶了。年初,公司业务惨淡,也无心向佛,总要找点事情做一做,充实下自己,这里选择了前期一直想继续研究的基于......
  • Django 用re_path()方法正则匹配复杂路由
    app1.url.pyfromdjango.urlsimportpath,re_pathfrom.importviewsurlpatterns=[path('index',views.index,name='index'),path('test',views.test,name='test'),path('test_int/<int:id>/......
  • 【字符串匹配】BF与KMP算法
    一、字符串匹配问题字符串匹配问题是指在一个主文本字符串中查找一个指定的模式字符串,并确定模式字符串在主文本中出现的位置。这个问题在计算机科学中非常常见,尤其是在文本处理、数据搜索和生物信息学等领域。字符串匹配问题通常涉及到以下几个方面:模式识别:识别主文本中是......
  • mysql索引(索引失效,遵循最左前缀,使用1.全值匹配 2.覆盖索引,失效:索引加函数,范围查询右边
    1.遵循联合索引最左列原则当表中创建了一个联合索引idx_name_age_position案例演示1.当我们在执行sql语句:以name为where条件时,我们可以用到索引EXPLAINSELECT*FROMemployeesWHEREname='LiLei';2.当我们在执行sql语句:以age为where条件时,索引就会失效......