您的位置:首页 > 其它

百度“搜索设置”之关于在页面定位某元素,而其中又参杂动态页面存在的问题解决方法

2017-03-15 18:52 651 查看
遇到定位不到元素的问题,应先确定:

1.定位元素的方法写的对不对(应先查找html中是否含有相同的元素及值得存在,以便写出正确的定位方法)

2.页面中是否存在frame与iframe(应使用driver.switch_to_frame(frame的id)跳转到争取的iframe)

3.验证页面是否存在动态元素及页面,导致元素定位不到

示例:定位百度首页的"搜索设置"





代码:

# coding=utf-8
from selenium import webdriver
dr = webdriver.Firefox()
dr.get('http://www.baidu.com')
abc = dr.find_element_by_link_text(u'设置')
abc.click()
ddd = dr.find_element_by_link_text('搜索设置')
ddd.click()
# print abc.get_attribute("outerHTML")


解释:

疑问1:他们不再同一个div,而且他们的关系差不多是同级.为什么要先click设置,在click搜索设置?

  因为搜索设置是动态的,不 click 那几行 html 还没生成

疑问2:看起来像是一个下拉框选取,为什么不采取那种定位元素的方法?

  我之前也采取过这种定位方式,后来可想而知,报一大推的错误。

  遇到此类问题,先去查看页面的源代码。在百度首页的源码中我们可以得知,“设置”与“搜索设置”不在同一个div下,且设置那行代码还有一个超链接。该连接就是"搜索设置"的页面。所以这种情况,我们只能通过二次定位方法来解决此问题

先来查看下拉框的源代码实例:

<html>
<body>
<select id="ShippingMethod"
onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod">
<option value="12.51">UPS Next Day Air ==> $12.51</option>
<option value="11.61">UPS Next Day Air Saver ==> $11.61</option>
<option value="10.69">UPS 3 Day Select ==> $10.69</option>
<option value="9.03">UPS 2nd Day Air ==> $9.03</option>
<option value="8.34">UPS Ground ==> $8.34</option>
<option value="9.25">USPS Priority Mail Insured ==> $9.25</option>
<option value="7.45">USPS Priority Mail ==> $7.45</option>
<option value="3.20" selected="">USPS First Class ==> $3.20</option>
</select>
</body>
</html>


注意下拉框他是在同一个select里面,此时我们可以采取下拉框的定位方式,如下:



疑问3:print abc.get_attribute("outerHTML")是干嘛的?

找不到正确的定位元素方法就把它打出来看看当时的内容就知道了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐