区别 selenium 中的 elements 与 element
例如:list.find_elements_by_class_name('rank_i_bname') # 获得 class name 为 rank_i_bname 的所有数据
list.find_element_by_class_name('rank_i_p_tit') # # 获得 class name 为 rank_i_p_tit 的一个数据,如果有多个则只取第一个
使用 selenium 定位到总分类
然后通过判断24小时畅销榜,进入到24小时畅销榜的书目录
最后获得书名和作者
代码如下:
1 #coding=utf-8
3 from selenium import webdriver
4 import unittest
7 class getListall(unittest.TestCase):
9 def setUp(self):
11 # 纵横小说中文网
12 base_url = 'http://book.zongheng.com/rank.html'
13 self.driver = webdriver.Chrome()
14 self.driver.implicitly_wait(10)
15 self.driver.get(base_url)
17 def test_get_list_all(self):
18 u"""获取数组"""
19 driver = self.driver
20 # 获取所有分类
21 lists = driver.find_elements_by_class_name('rank_i_p_list')
22 for list in lists:
23 # 获取24小时畅销榜下的书
24 if list.find_element_by_class_name('rank_i_p_tit').text == "24小时畅销榜":
26 # 获取书
27 names = list.find_elements_by_class_name('rank_i_bname')
28 authors = list.find_elements_by_class_name('rank_i_bcount')
30 # 打印获取的数据
31 for name,author in zip(names,authors):
32 print(name.text + "," + author.text + ";")
35 def tearDown(self):
36 self.driver.quit()
39 if __name__ == '__main__':
40 unittest.main()
分析结果会发现,第一个书单所获取的信息和其他的书单信息不一致
原因:查看网页html便可知
class=“rank_i_bname” 下的 text ,第一个书单和其他书单的信息是不一样的
如果看起来不美观可以将第一个书单提取处理单独进行定位获取信息进行打印
然后在 for 循环中将获取到的书单的第一个信息不要打印
转载于:https://www.cnblogs.com/tynam/p/10246978.html
原文链接:
http://www.cnblogs.com/tynam/p/10246978.html
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位
一组
元素一般用于以下场景:
遍历表格的全部单元格
先定位表格的页面元素对象,在表格对象中,把所有tr元素对象存储到list对象中。使用for循环,把对象从rows对象中取出来,使用findElements函数将表格行对象中的所有单元格对象存储到名为cols的List中。在使用for循环读取。
@Test
public void LocateTable(){
WebElement tableElement=driver.findElement(By.id("table"));
List<WebElement> r
lst = driver.find_elements_by_class_name("ib-it-text")
for lst in lst:
lst = lst.get_attribute("href")
print(lst.get_attribute("href"))