selenium 获取java script 变量 selenium 调用js_富文本编辑器


首先,我们来了解一下selenium调用JS语句的优缺点。

优点:

1.不受页面前端显示限制。(例如有一些页面元素需要鼠标悬停在某处,或者页面比较长,需要移动内嵌拖动条)

2.可以直接修改页面的参数(把一些属性改变),包括对CSS,HTML元素的增,删,改,定位。

缺点:

1.需要学习JS语句才能使用

什么是JS语句

JS语句其实就是web页面的脚本语言;

示例:网页在一个新的窗口中打开

有些链接按钮在点击后不是在当前窗口跳转,而是打开一个新窗口,这是因为在链接的标签上带target属性;当target=_blank时,点击链接打开新窗口。

selenium不能在当前窗口操作其他窗口,需要进行切换窗口。

调用js语句可以去除target属性,让链接在当前窗口打开

先使用js的定位方法进行定位(类似selenium的定位)
getElementByClassName(),
getElementById(),
getElementsByName(),
getElementsByTagName()
进行定位后用removeAttribute(“target”)去除target属性

示例一


selenium 获取java script 变量 selenium 调用js_增删改_02


这是百度新闻里的一个链接,target是_blank
代码:

from selenium import webdriver

driver=webdriver.Chrome()
driver.implicitly_wait(3)
driver.get(“http://news.baidu.com/tech“)
js = ‘document.getElementByClassName(“bold-item”).childNodes[0].removeAttribute(“target”)’
driver.execute_script(js)
driver.find_element_by_link_text(‘移动游戏市场同比增长近50% 疫情“宅经济”’).click()

分析:

对页面的元素、属性等进行增删改等操作,是调用JS语句才能实现的独特优势;

除此之外,还有一些selenium比较麻烦操作,例如:对iframe的富文本编辑器进行编辑,移动内嵌拖动条(上下和左右)等,调用JS语句都可以比较容易地实现。

示例二

对iframe的富文本编辑器进行内容编辑

js=’document.getElementById(“**“).contentWindow.document.body.innerHTML=” %s “ ‘ % jstext

分析:

使用selenium自带的方法,我们需要切换到iframe,再对iframe的body进行send_key操作,若使用js语句可以不切换到iframe,直接对富文本编辑器的内容进行操作

示例三

移动内嵌拖动条

上下移动:scrollTop,0为顶,10000为底部
js = ‘document.getElementsByClassName(“**“)[0].scrollTop=10000’

左右移动:scrollLeft,0为最左,10000为最右
js = ‘document.getElementsByClassName(“**“)[0].scrollLeft=10000’

分析:

对于窗口的拖动条,selenium可以使用ActionChains(driver).move_to_element(**).perform()

这个方法很方便使用

不过对于内嵌拖动条,selenium使用drag_and_drop_by_offset()方法与调用js语句相比,调用js语句的更加方便快捷,也更灵活

总结

在selenium中调用JS语句,可以实现一些不可替代的功能(对页面元素、属性进行增删改),也可以更灵活快捷地进行一些操作,对selenium自动化帮助还是挺大的。