selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。
常见场景:
当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。
这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。
滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,
这时候只能借助JS了,selenium当中可以用execute_script()方法执行js的脚本。
语句:
execute_script("arguments[0].scrollIntoView();",target)
execute_script("JS语句"
其中target为find_element_by_xx及我们要定位的元素。
所以滚动额步骤是:
1.通过selenium的定位元素方法找到该元素
2.通过执行JS脚本,将元素滚动到可见区域。
示例代码:
#定位要操作的元素 target_ele=driver.find_element_by_id("su") #将元素滚动到可见区域 driver.excute_script("arguments[0].scrollIntoView();",target_ele)
几种滚动方式如下:
1.移动元素target_ele对象的顶端与当前窗口的顶部对齐:
driver.excute_script("arguments[0].scrollIntoView();",target_ele)
#或
driver.excute_script("arguments[0].scrollIntoView(true);",target_ele)
2.移动元素target_ele对象的底端与当前窗口的底部对齐:
driver.excute_script("arguments[0].scrollIntoView(false);",target_ele)
3.移动到页面底部
driver.execute_script("windows.scrollTo(0,document.body.scrollHeight)")
或
js="var q=document.getElementById('su').scrollTop=10000" driver.execute_script(js)
4.移动到页面顶部
driver.execute_script("windows.scrollTo(document.body.scrollHeight,document.body.scrollHeight)")
或
js="var q=document.getElementById('su').scrollTop=0" driver.execute_script(js)
5.横向滚动条
有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况已经很少见了)。
driver.execute_script("windows.scrollTo(100,400)")#第一个参数100是横向距离,第二个参数400是纵向距离
除了滚动的方式操作滚动条在某些特殊页面可以用tab键来切换焦点定位到元素,这个时候我们就可以用键盘的tanb键来实现定位。
示例代码:
from selenium.webdriver.common.keys import Keys driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)