首页 > 编程语言 >Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

时间:2023-11-20 14:11:06浏览次数:40  
标签:定位 python driver 下拉框 click Selenium4 sleep div find

今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录

问题一: 有层级的复选框无法定位到二级目录

 

对于这种拥有二级框的选项无法定位,也不是<select>属性.

我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发.

 

解决: 

driver.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/section/div/div/div[2]/form/div[1]/div/span/span').click()
sleep(1)
driver.find_element(By.XPATH,'/html/body/div[2]/ul[1]/li[2]').click()
sleep(1)
driver.find_element(By.XPATH,'/html/body/div[2]/ul[2]/li[2]').click()
sleep(1)

 

问题二:封装成<div>的动态日历无法定位

这个日历和上一个问题一样,也是被单独封装在最后的<div>里,当输入框被点击时才会弹出,此时使用 select方法和js删除属性都没法直接输入日期值.

使用问题一的解决方案:

发现还是定位不了,虽然在Chrome中定位是正确的,也能点击日历弹出,但是却无法定位到日历中.

解决方案:

此时就要通过需要点击的位置的父级标签去定位,而不能使用绝对路径

而在刚刚二级框中则是要使用绝对路径去定位.

有多个相同的属性的话,用find_elements复选属性来确定要哪个.

# 点击启动弹窗
self.driver.find_element(By.CSS_SELECTOR, 'input[placeholder="选择结束时间"]').click()
sleep(1)

# 定位不到(绝对路径)
# driver.find_element((By.XPATH,'/html/body/div[5]/div[1]/div/div[3]/table[1]/tbody/tr[6]/td[4]/div/span')).click()

# 使用父级标签定位
driver.find_elements(By.XPATH,'//tbody/tr[6]/td[4]')[0].click()

注意事项:

在使用XPath定位的时候,会因为过快导致还没找到元素(添加智能等待(隐式等待)也会),导致python报错终止,所以适当在点击前增加强制等待(sleep)就能解决问题

当定位的标签有多个时,可用复选属性来定位(下标是从0开始的)

driver.find_elements(By.TAG_NAME, "标签名")[下标]

最后的最后:

问题虽然是解决了,可是为啥二级选框要使用绝对路径,而日历却不行,有懂得的小伙伴吗?

标签:定位,python,driver,下拉框,click,Selenium4,sleep,div,find
From: https://www.cnblogs.com/Zshucan/p/17843824.html

相关文章

  • 加密锁(加密狗)保护Python应用程序防止被反编译
    开发套件使用的是原HASP/SafeNet/金雅拓/泰雷兹加密狗最新开发工具加密锁(加密狗)对python程序代码加密保护,保护自己软件版权被F法使用。(注:本文为Python程序保护的纯技术贴,欢迎留言探讨)开发工具下载:​​http://www.chinadlp.com/?list-DriveDownload.html​​概述使用圣天诺加密......
  • [944] Extracting tables from a PDF in Python
    ToextracttablesfromaPDFinPython,wecanuseseverallibraries.Onepopularchoiceisthe tabula-pylibrary,whichisaPythonwrapperforApachePDFBox.Hereisastep-by-stepguidetogetstarted:1.Installtherequiredlibraries:pipinstalltab......
  • 【4.0】Python高级之匿名函数
    【一】匿名函数的定义在Python里有两类函数:第一类:用def关键词定义的正规函数第二类:用lambda关键词定义的匿名函数Python使用lambda关键词来创建匿名函数,而非def关键词lambdaargument_list:expressionlambda:定义匿名函数的关键词。argument_list:函......
  • 【7.0】Python高级之生成器
    【一】什么是生成器?Python中的生成器是一种特殊的迭代器,可以在需要时生成数据,而不必提前从内存中生成并存储整个数据集。通过生成器,可以逐个生成序列中的元素,而无需一次性生成整个序列。生成器在处理大数据集时,具有节省内存、提高效率的特点。【二】生成器有两种创建方式【......
  • 【6.0】Python高级之迭代器
    【一】迭代器介绍迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代whileTrue:msg=input('>>:').strip()......
  • 【Python入门教程】Python中函数的用法和意义
    ​        在Python中,函数是一种可重用的代码块,它可以被多次调用以执行特定的任务。函数可以帮助我们组织代码,使其更易于阅读和调试,同时还可以提高代码的可重用性和可维护性。一、函数的定义        在Python中,函数使用def关键字进行定义,语法如下:deffunctio......
  • Python中用requests时遇到的错误警告解决方案
    最近,我在Python2.7.6(Ubuntu14.04.2LTS)环境中将requests库的版本从2.5.3升级到2.6.0,却遇到了’AtrueSSLContextobjectisnotavailable’警告。每当我在Python2.7.6环境中尝试使用requests库访问’github’时,都会看到这个警告。mkvirtualenvrequests260-irequests==2.6.0......
  • Python 另存为 excel
    复制一个excel注意openpyxl-3.0.10fromopenpyxl.reader.excelimportload_workbookif__name__=='__main__':wb=load_workbook('source.xlsx')wb.save('样式表.xlsx')其他版本异常错误openpyxl:Valuemustbeeithernumericalor......
  • Python pandas 自动自动调整列宽 和加边框
    注意openpyxl-3.0.10版本代码importnumpyasnpimportpandasaspdfromopenpyxl.stylesimportBorder,Sidefromopenpyxl.utilsimportget_column_letterimportpandasaspdimportopenpyxlif__name__=='__main__':excel_file=pd.ExcelFile(&#......
  • 滚动对话框内容,已打开的下拉框超出对话框范围显示
    问题场景点击对话框内的下拉框,显示下拉列表,纵向滚动对话框内容,已经打开的下拉列表,超出对话框范围仍然显示。分析下拉框列表消失的条件是下拉框失焦。因此,有三种解决方案:给对话框设置样式:下拉框超出对话框范围就隐藏;给对话框内的下拉框设置:若滚动对话框,则让下拉框失焦,即关......