selenium 元素定位

1.contains(a, b)

xpath中提供了三个非常好的方法来为我们定位部分属性值

1、contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

2、starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

3、ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

2.last()

不过可以发现一个规律,虽然这个div是变动的,但它始终位于最后一个节点巧妙的引入,last()函数

/html/body/div[6]/div[1]/div[1]/ul/li

/html/body/div[7]/div[1]/div[1]/ul/li

/html/body/div[8]/div[1]/div[1]/ul/li

整个xpath的写法变为:/html/body/div[last()]/div[1]/div[1]/ul/li

3.WebDriverWait.until

WebDriverWait(driver,20).until(EC.visibility_of_any_elements_located((By.XPATH,"//div[@id='resultList']/div/div[2]/button")))

4.通过父级元素定位

描述:多个attr-id=851002的元素,但是父级id='prod_4'是唯一的,可用下面的方法省略中间过程

eleNum=driver.find_element_by_xpath("//*[@id='prod_4']/*//div[contains(@attr-id, 851002)]/input")

5.获取当前时间

currenttime=get_driver().execute_script('var myDate = new Date(); var timeStr = myDate.getFullYear()+""+myDate.getMonth()+""+myDate.getDate()+""+myDate.getHours()+""+myDate.getMinutes()+""+myDate.getSeconds(); return timeStr;');

6.通过弟弟找到哥哥

//*[@data-assist="edOrder"]//*[@id='rowclick']/div/a[contains(text(),'昆明')]/../label/input

7.for循环语句

ele1=driver.find_elements_by_xpath("//*[@id='catalogTab']/div/div/a/i")

for i in ele1:

    i.click()

    sleep(4)

8.获取标签属性值并赋予出参

flag=driver.find_element_by_xpath("//*[@id='accNumDiv']/div/div/input").get_attribute('value')

put_out_data('ZNZW',flag)

9.click点击无效时可换成js方式(新装商企智能组网)

ele = driver.find_element_by_xpath("//div[@id='prod_1']//div[@id='toolsNew']")

driver.execute_script("arguments[0].click();",ele)

10.变量的使用

10-1数字型变量在xpath路径中

nb=${nb}

driver.find_element_by_xpath("(//ul[@class='table_td']//span[contains(text(),'在用')])["+nb+"]/../..//input")

10-2字符型变量在路径中

driver.find_element_by_xpath("//div[@data-widget='chooseServiceOffer']//a[text()='"${typename}"']").click()

10-3字符型变量在contains路径中

sj=${acc1}

driver.find_element_by_xpath("//*[@id='prodNum']").send_keys(sj)

ele1=driver.find_element_by_xpath("//div[@id='searchProdInfoResult']//span[contains(text(),'"+sj+"')]/..//input")

11.如何退出iframe去定位iframe外的元素

driver.switch_to.default_content()

12.判断元素列表的个数

elements=driver.find_elements_by_xpath("//*[@id='doIt']/a")

number=str(len(elements))

13.去掉字符串的空格

b2=str.strip(flag.text)

normalize-space()的功能是去掉前后的空格

//div[normalize-space(@class)='']/text()

14.截取文字

flag=driver.find_element_by_xpath("//*[@id='chargeItem']/div[contains(@id,'有线宽带')]").get_attribute('id')

kdacc=flag[5:17]

15.判断是否被选中

if Element(loc="//*[@id='c_custOrderNbr']",l_type="XPATH").is_selected():

        logging.info("流水号已被勾选")

else: 

    driver.find_element_by_xpath("//*[@id='c_custOrderNbr']").click()

16.判断是否出现某个元素

 if Element(loc="//*[@id='channelDiv']/a",l_type="XPATH").is_display():

        logging.info("渠道选择出现")

    else:

       logging.info("未出现渠道选择")

17.selenium实现点击空白区域方法

空白区域对应selenium来说没法操作,可以点击一个没有连接的静态图片或者文字,也是一样的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\],你遇到的问题是在使用Selenium自动化时,点击一个鼠标悬停才显示的SVG时失败。根据引用\[2\]的解决方法,你需要重复点击三次才能生效,并且点击区域必须是元素的中间。你可以使用以下代码来解决问题: ```python for i in range(0,len(trs)): if i == 0: continue else: print("定位元素") buttonsvg = trs\[i\].find_element(By.CSS_SELECTOR,'td:nth-child(4) > div > div > svg') print("悬停在计划按钮上并点击3次后生效") main.browser.execute_script( "arguments\[0\].setAttribute('style', arguments\[1\]);", buttonsvg, "border: 2px solid red;" ) action.move_to_element(buttonsvg).move_by_offset(9,7).click().perform() action.move_to_element(buttonsvg).move_by_offset(9,7).click().perform() action.move_to_element(buttonsvg).move_by_offset(9,7).click().perform() sleep(1) ``` 根据引用\[3\],如果直接使用XPath无法定位到该元素,你可以尝试使用正确的XPath路径来定位SVG元素。正确的XPath路径应该是: ```python driver.find_element_by_xpath('//*\[@id="mainWrapper"\]/div\[2\]/div\[2\]/div\[2\]/div/div/div\[2\]/div/div\[2\]/div//*\[name()="svg"\]').click() ``` 这样就可以实现对SVG的点击操作了。希望这些解决方法对你有帮助。 #### 引用[.reference_title] - *1* *2* [Python Selenium 模拟点击一个鼠标悬停才显示的SVG时失败](https://blog.csdn.net/NidhoogJX/article/details/126705652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [web selenium div下的第一个svg](https://blog.csdn.net/weixin_43588508/article/details/125337714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值