selenium小白学习笔记(10) - 第四个脚本(CSDN博客为例,包含定位多个元素,切换和关闭新窗口)

例子说明

寻思着用每天都登录的CSDN博客来试验一下selenium的功能吧,以下是小例子说明:
打开CSDN博客的python板块,查看前10条博客。

例子脚本

from selenium import webdriver
import unittest
import time

class TestCSDN(unittest.TestCase):
    
    def setUp(self):
        self.driver=webdriver.Chrome()
        self.base_url=r"https://blog.csdn.net/"

    def closeNewWindow(self):
        handles=self.driver.window_handles
        self.driver.switch_to.window(handles[-1])
        self.driver.close()
        self.driver.switch_to.window(handles[0])
        
    def test_python(self):
        # 将浏览器窗口最大化,打开CSDN博客首页,设置隐式等待时间10秒钟
        self.driver.maximize_window() 
        self.driver.get(self.base_url)
        self.driver.implicitly_wait(10)

        # 点击打开Python板块
        time.sleep(3)
        self.driver.find_element_by_link_text("Python").click()

        # 点击打开第1个博客,等待几秒后,关闭此博客页面
        time.sleep(3)
        blogs=self.driver.find_elements_by_xpath("//ul[@id='feedlist_id']/li/div/div/h2/a")
        blogs[0].click()
        time.sleep(5)
        self.closeNewWindow()

        # 点击查看博客列表中第2到10个博客
        for blog in blogs[1:10]:
            blog.click()
            time.sleep(5)
            self.closeNewWindow()

    def tearDown(self):
        time.sleep(5)
        self.driver.quit()

if __name__=="__main__":
    unittest.main()

定位多个元素

find_elements_by_id(或by_name、by_xpath之类):
定位多个元素,以前刚接触的时候想这个有啥用,最近操作的多了,才知道它的用途:
表格或者列表,他们通常由多个行组成,或者说由多个同类的元素组成。若想定位其中某个行,可以用find_elements_by_id先获取到所有行组成的列表list,然后再使用list[n]来定位其中的某一行。

比如本文中的例子,网页中博客列表的元素如图(使用Chrome开发者工具可查看到网页HTML的元素):
在这里插入图片描述
ul是列表,li是每一行博客,每个博客中又分为了好多个div小块,图片中亮色显示的a超链接元素,才是博客的标题部分,但是列表中显示的博客并不是固定的。
blogs=self.driver.find_elements_by_xpath("//ul[@id=‘feedlist_id’]/li/div/div/h2/a")
blogs[0].click()
使用本语句先定位到所有超链接,并保存到列表blogs中。然后再使用列表blogs[index]来定位具体某一行。index从0开始。

切换和关闭新窗口

点击博客标题后,会打开一个新的窗口显示博客具体内容。此时我们可使用如下语句进行窗口切换,将操作的对象变为新窗口。
1)handles=self.driver.window_handles
获取到当前所有浏览器窗口的句柄,并保存到列表handles中。
本例子中此时包含2个句柄,CSDN python博客列表页,以及新打开的博客具体内容页面。
2)self.driver.switch_to.window(handles[-1])
使用切换窗口方法,切换到句柄列表中最后一个句柄对应的窗口,即新打开的页面。

当博客查看完毕后,关闭博客所在窗口,切换回CSDN博客网页:
3)self.driver.close()
关闭当前窗口
4)self.driver.switch_to.window(handles[0])
使用切换窗口方法,切换到句柄列表中第一个句柄对应的窗口,即CSDN python博客列表页。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值