页面操作JS操作

python通过webdriver控制浏览器JS,python的指令转化成js代码,如果python当中没有直接封装好的JS指令,就需要自己写JS指令。

Selenium之前有获取界面属性的接口(get_attribute()),但是没有设置界面属性的接口,这时候就需要自己封装,比如set_attribute(),这个接口,结果返回值通过,driver.execute.script这个执行JS代码,set_attribute这个接口里,首先获取元素属性,然后修改元素属性,就可以实现接口功能,

def set_attribute()

   a = """e=document.getElementbyid("kw");

   e.value="柠檬班";

    """

   driver.executescript(a)

12306网址,在网址上输入需要的日期,这个日期栏中是一个input元素,input元素是通过value值传递的,可以把value值改掉,但是现在修改不了,原因是有readonly元素,把readonly去掉就可以修改日期,

在页面的控制台Console可以获取需要的元素,然后修改元素,直接在pycharm中写容易有语法错误,就需要先在控制台写,然后复制到pycharm中,前面python代码,下面是js,两个系统之间的交互需要使用强制等待,(time.sleep()),

由于JS运行速度比较快,有时候运行会卡,浏览器还没来得及渲染,可以把一条JS代码分开执行,中间用一个强制等待,

python当中已经定位了元素,JS也需要重新定位一次,因为python和JS两个代码放一行代码中,会找不到相应的元素,比如:

elem = driver.find_element_by_id("train_date")
js_code = 'elem.readonly=false'
这样会找不到该元素,
如果实现参数化,python可以和JS代码放一起,用arguments[0]相当于python当中format的占坑位,
elem = driver.find_element_by_id("train_date")
time.sleep(0.2)
js_code = 'argument[0].readonly=false;'
driver.execute_script(js_code,elem)
argument[0]表示第一个元素,argument[1]表示第二个元素

二、窗口滚动
窗口滚动在python当中本来实现了这种方式是可以用的(elem.location_once_scrolled_into_view,是一个属性,不需要串参数的也不需要打括号)但是不太好用,
窗口滚动是为了能够更好的查找元素,
有的元素需要不停的滑动,不停加载新界面出来,比如滑动到最底部,需要通过坐标实现的,通过window.scrollTo(0,document.body.scrollHeight)
js_code='window.scrollTo(0,document.body.scrollHeight)

driver.execute_script(js_code)
这样就可以实现窗口滑动


 

posted @ 2020-08-23 11:37  雪儿的回忆  阅读(123)  评论(0)    收藏  举报