zoukankan      html  css  js  c++  java
  • Python爬虫:

    python中selenium操作下拉滚动条方法汇总

     

    UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等;但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了。

    比如下面这样一个网页,需要进行拖动下拉条后才能通过selenium找到密码输入框的元素,

    在python中有几种方法解决这种问题,简单介绍下,给需要的人:

    方法一)使用js脚本直接操作,方法如下:

    js="var q=document.getElementById('id').scrollTop=10000"
    driver.execute_script(js)

     或:

    js="var q=document.documentElement.scrollTop=10000"
    driver.execute_script(js)

    这里的id为滚动条的id,但js中没有xpath的方法,所以滚动条没有id的网页此方法不适用

    方法二)使用js脚本拖动到提定地方

    target = driver.find_element_by_id("id_keypair")
    driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去

    这个方法可以将滚动条拖动到需要显示的元素位置,此方法用途比较广,可以使用

    方法三)根据页面显示进行变通,发送tab键

    在本例中的页面中,密码是输入框,正常手工操作时,可以通过tab键会切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示

    from selenium.webdriver.common.keys import Keys
    driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)

    update

    前段时间使用robotframe work框架时,selenium2library里面有一个非常好用的功能Focus,会自动定位到元素,研读一下源码:

        def focus(self, locator):
            """Sets focus to element identified by `locator`."""
            element = self._element_find(locator, True, True)
            self._current_browser().execute_script("arguments[0].focus();", element)

    从源码中我们可以看到,此方法与我们在python自己写的方法二)一致,工具给我们做了封装。

    Email:362299908@qq.com
     
    标签: seleniumpython
  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/cx2016/p/11758545.html
Copyright © 2011-2022 走看看