V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jahan
V2EX  ›  问与答

请教哪里有 selenium( Python )执行 javascript 方面的资料?

  •  
  •   jahan · 2017-11-28 12:27:22 +08:00 · 2628 次点击
    这是一个创建于 2552 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想专门学一下,觉得很多情况下还是要 jsexecute_script 才能搞定的。就是没有找到比较系统的资料。? javascript 不是特别熟悉。。。大家能推荐一下吗 比如这个例子 driver.execute_script('arguments[0].click()', ele) 一直搞不清楚 arguments[0].click() 是怎么来的?怎么和要分析的网页结合起来呢?

    22 条回复    2017-11-29 00:38:12 +08:00
    p2pCoder
        1
    p2pCoder  
       2017-11-28 12:44:39 +08:00
    虽然 我没用过 selenium 执行 过 arguments 执行过 js,但是这个
    我的理解是 是 执行 的 元素 ele 的 click 绑定的事件函数

    我一般 用 execjs 这个库,执行 前端 一些 复杂的 js 加密代码

    还有 如果 你 对 前端 js dom 事件等 完全不了解,理解这些还是 有难度的
    jahan
        2
    jahan  
    OP
       2017-11-28 14:03:51 +08:00
    js 一点都不懂,正在学,
    也就是 arguments 是这个 ele 上绑定的动作,也就是要找到这个 js,然后就能找到这个 arguments ?
    p2pCoder
        3
    p2pCoder  
       2017-11-28 14:09:01 +08:00   ❤️ 1
    @jahan arguments[0] 明显是 占位的,就是代表 这个 ele
    你要执行的 就是 这个 ele 的 click 事件
    你要 找到 这个 元素,然后看在 html 里面 有没有 绑定 click 事件
    如果 没有,就继续看 这 页面 初始化过程中 有没有 给这个 ele 添加 click 事件
    jahan
        4
    jahan  
    OP
       2017-11-28 14:13:20 +08:00
    那还要请教下,怎么找绑定在 ele 上的 js 呢?
    jahan
        5
    jahan  
    OP
       2017-11-28 14:15:51 +08:00
    通过什么变量找到呢?确实 js 没什么基础。
    p2pCoder
        6
    p2pCoder  
       2017-11-28 14:21:13 +08:00
    @jahan 这个 你还是 学 下吧,直接给你讲,也不好说,你做爬虫或者 自动化 完全 不懂 前端 也基本 不靠谱
    jahan
        7
    jahan  
    OP
       2017-11-28 14:36:18 +08:00
    看来还真要从头学。估计也就是一个 hook,就能把这两个东西连起来。
    onemorecd
        8
    onemorecd  
       2017-11-28 15:20:06 +08:00
    PyV8 ?
    jahan
        9
    jahan  
    OP
       2017-11-28 15:24:42 +08:00
    @onemorecd 目前处要找到 ele 上对应的 javascript 阶段,不知道有什么特征可以找到。
    jahan
        10
    jahan  
    OP
       2017-11-28 16:47:39 +08:00
    @p2pCoder 不知大神为什么说直接讲不好说,元素有 id,有 class,到 js 里面找相同的 id 和 class 就可以找到,两个东西就 hook 上了。这样理解对吧,倒是找到了,下面找点击动作。
    p2pCoder
        11
    p2pCoder  
       2017-11-28 16:51:04 +08:00
    @jahan 理解是对的,这个是定位元素,下面就是 查找点击时间
    jahan
        12
    jahan  
    OP
       2017-11-28 17:27:46 +08:00 via iPhone
    @p2pCoder 点击事件一般怎么写?看到代码里面有不少的 visible 设置。没看到 click
    p2pCoder
        13
    p2pCoder  
       2017-11-28 17:31:38 +08:00
    @jahan 看元素上 有没 onclick 属性,看 js 里面,元素 有没有 添加 onclick,或者 jquery 的 click
    jahan
        14
    jahan  
    OP
       2017-11-28 19:51:31 +08:00
    @p2pCoder
    *************
    }), this._buttons.moveRight.on("click", function(t) {
    t.preventDefault()
    }), this._buttons.turn.on("click", function(t) {
    t.preventDefault(), e.GUIResetScales()
    }), this._buttons.zoomOut.on("click", function(t) {
    t.preventDefault(), e.model() && e.model().zoomOut()
    }), this._buttons.zoomIn.on("click", function(t) {
    t.preventDefault(), e.model() && e.model().zoomIn()
    }), t = {}, $("body").on("keydown", function(e) {


    ***********************
    元素上倒是没发现有什么 onclick 属性,元素包裹在 svg 里面,就一个简单的 class ;在 js 里面倒是发现了这个 click,问题是因为基础太差,不知道哪一段是个完整的句子。zoomOut.on("click",function(t))这个 zoonOut 是我关注的元素,
    jahan
        15
    jahan  
    OP
       2017-11-28 20:34:48 +08:00
    this._buttons.zoomOut.on("click", function(t) {
    t.preventDefault(), e.model() && e.model().zoomOut()
    })

    难道是这句?
    binux
        16
    binux  
       2017-11-28 21:16:50 +08:00 via Android   ❤️ 2
    不要去找元素上绑定的 js,你就点它,让浏览器执行就完了。
    jahan
        17
    jahan  
    OP
       2017-11-28 22:15:39 +08:00
    @binux 感谢指点。这个元素是个不可见的元素,click 不到啊。好多都会说要 js,不过这个 js 对我来说确实有点难度了。
    iyaozhen
        18
    iyaozhen  
       2017-11-28 22:38:17 +08:00 via Android
    1.一般使用的话不需要执行 js,selenium 本身就够了
    2.还是先学下 js 吧
    3. selenium 写 case 的思路是按照用户执行的路径,找元素、点点点就行。可以不用懂 js 是怎么执行的
    Lattez
        19
    Lattez  
       2017-11-28 22:47:47 +08:00 via Android
    Selenium + Phantomjs
    jahan
        20
    jahan  
    OP
       2017-11-29 00:04:22 +08:00
    @iyaozhen 现在想获取该元素的坐标(已经获取到了),然后设置焦点(这个没查到),然后点击( click?),这个怎么办呢
    iyaozhen
        21
    iyaozhen  
       2017-11-29 00:31:51 +08:00
    @jahan 不可见元素用户怎么点击的呢?
    主要是你的需求是啥?很可能是个 x-y 问题。
    jahan
        22
    jahan  
    OP
       2017-11-29 00:38:12 +08:00
    @iyaozhen 其实就是点击 10 几次进行缩小操作。现在获取到了坐标 ActionChains(driver).move_to_element_with_offset(zoomOut, locationZoomout['x'], locationZoomout['y'])\
    .click().perform()

    执行上面这个貌似还是没有反应呢,但是在 c#里面,用 win32.setcursorPos(x,y) 然后 click 就成功了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:07 · PVG 23:07 · LAX 07:07 · JFK 10:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.