selenium webdriver对变动元素的定位

 

最近在看虫师的selenumiu + python实践书。

里面有一个案例实现126邮箱自动登录,碰到两个问题:

1.iframe切换问题

2.变动元素id的定位问题

 

因为126邮箱的布局里面有iframe布局,所以进行定位输入框时,必须先切换到对应的iframe下面。

看了很多博客,切换到iframe时,需要用如下的代码:

browser.switch_to.frame('x-URS-iframe')

但是,不知道是126邮箱是否更新了前端的代码,现在iframe的对应的id已经从固定的“x-URS-iframe”变更如下:

“x-URS-iframe1542636781200.565”,而这个id号里面的数字不是固定的,导致用上面switch_to.frame定位时无法定位到。

 

终于看到下面这个哥们的博客,恍然大悟,最终用”曲线救国“的方式切换并定位到了输入框:

https://blog.csdn.net/woiangaoiowe/article/details/62226578

>好在可以通过xpath来实现

>先定位到该元素最上一次固定不变的元素位置,然后通过层级关系找到该元素所在的层级,然后实现定位

普通的find_element_by_XXX行不通的时候,用find_element_by_xpath先定位到iframe最接近的祖先元素位置,再通过层级关系找到该元素所在的层级实现定位。

虽然不是用”直接“的方法,但是至少实现了定位这个功能。

下面就是主要的代码块:

driver = webdriver.Chrome()

driver.get("http://www.126.com")

time.sleep(2)

frame1 = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe')

driver.switch_to.frame(frame1)

 

 

※备注:把iframe对应的“层”以及它的父级“层”的源码如下:(用Chrome copy outHTML得到)

⇒126邮箱的iframe写得也有点“绝,id会变动,class,name这些都为空,定位的确不容易。

 

 

你可能感兴趣的:(python,HTML)