问一下webdriver的execute_script功能
本帖最后由 xiaodanfeng520 于 2015-3-11 18:40 编辑请问问用python写自动化脚本,代码如下:
url="xxxxxx"
driver = webdriver.Firefox()
driver.get(url)
js="return $('.content li .list_desc .list_dtitle').eq(0).find('a')";
driver.execute_script(js).click();
为啥我在浏览器里面执行javascript语句后,能返回正确的链接。但是却无法执行click动作,打印脚本返回的值 却没有结果?
print driver.execute_script(js)
用java语言我执行过,没有问题,熟悉python的帮忙指导一下
再把代码贴一下,不知道为啥这个显示黑块?
url="xxxxxx"
driver = webdriver.Firefox()
driver.get(url)
js="return $('.content li .list_desc .list_dtitle').eq(0).find('a')";
driver.execute_script(js).click(); driver.execute_script会返回一个列表
#示例
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.douban.com")
movie = driver.execute_script("return $('.lnk-movie')")
movie.click() ermine 发表于 2015-3-12 13:24
driver.execute_script会返回一个列表
#示例
谢谢你,我按照你的方法试了一下,不过好像不能执行成功,不知道是不是没有登录豆瓣,我没有账号,按照你的方法我试了以下百度首页,比如我想试试百度首页选中 新闻/网页/贴吧/知道/音乐 等那几个标签中的一个,代码如下:
url = "https://www.baidu.com/"
driver = webdriver.Firefox()
driver.get(url)
js="return $('#nv a')"
link = driver.execute_script(js)
link.click()
错误如下:
link.click()
KeyError: 1
另外,为啥python不像java一样,能打印出返回值的类型呢?我试了一下print返回值的__class__值,没有显示在终端,不知道是不是我的方法错误,比如我想打印print link__class__也是报上面错。
ps:前端的东西我稍微懂点,做过前端开发,所以js会一点,java也比较熟悉,就是python不太会,很多库方法不熟悉,不知道怎么使用 xiaodanfeng520 发表于 2015-3-12 17:14
谢谢你,我按照你的方法试了一下,不过好像不能执行成功,不知道是不是没有登录豆瓣,我没有账号,按照你 ...
又确认了一下,应该是firefox不支持这种,execute_script返回的是js,而不是页面元素
link = driver.execute_script(js)
#直接打印
print link
link.click()
如果用chromewebdriver,打印出来的就是一个列表,
[<selenium.webdriver.remote.webelement.WebElement object at 0x00000000029EA518>, <selenium.webdriver.remote.webelement.WebElement object at 0x00000000029EA320>],然后就可以用link.click()了
话说,你是为什么一定用js?selenium本身有css选择的
link = driver.find_element_by_css_selector('#u1 a')
print link
link.click()
PS:
我原来的帖子怎么不见了。。。。 谢谢ermine,我只是想用execute_script(js)这个方法,不是为了达到自动化完成这个功能,我知道有很多方法可以达到我要求的目标,比如link text,d xpath,css等,不过我就是想知道使用python调调用这个execute_script(js)的时候,为什么一直不成功,因为很多地方使用 js定位还是很不错的,jquery本身有很多定位元素的好方法。因为我在java中使用selenium的execute_script(js)的方法是比较好用的,并且我封装了一些别的js的方法,方便自己使用。但是觉得java没有pyhton语言简便,所以考虑用python试试,一来也可以多掌握一门语言,呵呵 execute_script(js) 这个方法应该是跟语言绑定无关的,我可以理解楼主想用execute_script(js),但是为啥要返回元素对象到python 层面再调webdriver的click()方法的,既然楼主调用执行jquery, 那为啥不用jquery定位之后的click()方法,execute_script("return $('#element').click();");
页:
[1]