元素在超出当前界面的下拉列表中如何定位

有时我们会遇到一种情况是,当我们找一个视频列表中的视频,在页面的最底层,此时selenium 无法定位到这个元素,因为 selenium只能定位页面上显示出来内容的元素,需要通过下拉框把界面拉到该元素所在的位置,再进行定位。

比如我们点击成员,想要在当前界面找成员名为“changcheng1211”的成员,最上面找不到,当往下拉滚动条到这个位置时,才可以定位这个元素。

下面是解决方案,先写一个循环,每次按一下向下的箭头,让界面往下移动,同时定位一下。等定位到就可以退出这个循环。

        # 1、点击页面左侧“成员”
        login.find_element(By.LINK_TEXT, '成员').click()
        # 2、点击任意成员头像进入成员主页

        # 3、点击“关于”进行浏览
        # Keys这个类中提供了键盘上不能直接输入的按键,比如回车键,F1,ESC...,TAB...
        # 按住ctrl键,鼠标点击类名,可以查看源码。ARROW_DOWN 是往下。
        time.sleep(1)
        ac = ActionChains(login)
        login.implicitly_wait(1)
        for i in range(1000):
            ac.send_keys(Keys.ARROW_DOWN).perform()
            login.find_element(By.CSS_SELECTOR, '[title="changcheng1211"]').click()

此时会报错:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [title="changcheng1211"]

此时可以把这个错误作为一个异常进行处理,

        # 1、点击页面左侧“成员”
        login.find_element(By.LINK_TEXT, '成员').click()
        # 2、点击任意成员头像进入成员主页

        # 3、点击“关于”进行浏览
        # Keys这个类中提供了键盘上不能直接输入的按键,比如回车键,F1,ESC...,TAB...
        # 按住ctrl键,鼠标点击类名,可以查看源码。ARROW_DOWN 是往下。
        time.sleep(1)
        ac = ActionChains(login)
        login.implicitly_wait(1)
        for i in range(1000):
            ac.send_keys(Keys.ARROW_DOWN).perform()
            try:
                login.find_element(By.CSS_SELECTOR, '[title="changcheng1211"]').click()
                break
            except NoSuchElementException:
                continue

其中,要加入一个隐式等待1秒,增加稳定性。

login.implicitly_wait(1)

滚动条往下循环按一下,

ac.send_keys(Keys.ARROW_DOWN).perform()

增加捕获异常,如果找到这个元素就点击并退出

try:
        login.find_element(By.CSS_SELECTOR, '[title="changcheng1211"]').click()
        break

如果找不到这个元素就会捕获到NoSuchElementException异常,并继续循环。

except NoSuchElementException:
    continue
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值