200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python+selenium 使用for循环 遍历 定位 获取 单个元素中想要的值

python+selenium 使用for循环 遍历 定位 获取 单个元素中想要的值

时间:2019-03-22 21:30:01

相关推荐

python+selenium 使用for循环 遍历 定位 获取 单个元素中想要的值

python+selenium 使用for循环,遍历 定位 获取 单个元素中想要的值

1、HTML结构

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><div class="content"><!-- 单个商品 START --><div class="items"><a class="title href" href="" target="_blank">商品1</a><span class="price">价格:<em>99</em></span><div class="comment">评价:<i>111</i></div></div><!-- 单个商品 END --><!-- 单个商品 START --><div class="items"><a class="title href" href="" target="_blank">商品2</a><span class="price">价格:<em>88</em></span><div class="comment">评价:<i>222</i></div></div><!-- 单个商品 END --><!-- 单个商品 START --><div class="items"><a class="title href" href="" target="_blank">商品3</a><span class="price">价格:<em>77</em></span><div class="comment"><span style="color:red">评价不存在:</span></div></div><!-- 单个商品 END --></div></body></html>

2、页面展示

3、python代码

from selenium import webdriverfrom mon.exceptions import NoSuchElementException # 导入NoSuchElementExceptiondriver = webdriver.Chrome() # 打开谷歌浏览器driver.get("/index/index/") # 打开一个网址(本地地址)goods_arr = driver.find_elements_by_xpath("//div[@class='items']") # 获取到每个商品条目for i, goods in enumerate(goods_arr):title = goods.find_element_by_css_selector("a.title").text # 商品名href = goods.find_element_by_css_selector("a.title").get_attribute("href") # 地址price = goods.find_element_by_css_selector("span.price em").text # 价格# 评价不存在判断try:comment = goods.find_element_by_css_selector("ment i").text # 评价except NoSuchElementException:comment = 0print("第[%s]个商品,标题[%s],地址[%s],价格[%s],评论[%s]"%(i+1, title, href, price, comment))

4、执行结果

5、注意事项

1)、在for循环中,最好别使用 goods.find_element_by_xpath(),因为这个方法每次都是基于HTML根起点开始查找的,所以每次循环出来的结果都是一样的。

2)、有人说可以用变量i来定位 goods.find_elements_by_xpath("/a[@class='title']")[i]

这样也是有问题的,如果某个商品(不是最后一个商品)的title不存在,就会有问题。

比如说第二个商品的title不存在:

按照goods.find_elements_by_xpath("/a[@class='title']")[i]

第二个商品的title就会取到第三个的,这显然是不对的。

6、依据:python-selenium中文文档 - XPath定位

XPath是用来定位XML文档节点的语言。不过HTML可以看成是XML(XHTML)的一种实现。Selenium用户可以使用这个强力的语言来瞄准Web应用的元素。 XPath延伸了用id或者name属性来定位的单一方法,开创了许多可能性,例如定位页面的第三个复选框

用XPath的主要理由之一,就是你想定位的元素没有合适的id或者name属性的时候,你可以用XPath来对元素进行绝对定位(不推荐)或者把这个元素和另外一个有确定id或者name的元素关联起来(即相对定位)。XPath定位器也可以用来找出那些具有id,name以外属性的元素。

绝对的XPath定位包含了从HTML根节点起的所有元素,并且一些轻微的改变就会失效。而用id或者name属性来找到一个靠近的元素(比较理想的是父元素),这样你就可以依靠他们的相对关系来确定目标元素的位置。这种情况改变的可能就小了很多了,我们写的测试程序也会更可靠。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。