请教哪里有 selenium( Python )执行 Javascript 方面的资料? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jahan
V2EX    问与答

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

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

    想专门学一下,觉得很多情况下还是要 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     Solana     3712 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:55 PVG 08:55 LAX 16:55 JFK 19:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86