【问题标题】:How to introduce custom variable(s) inside driver.execute_script(<HERE>)?如何在 driver.execute_script(<HERE>) 中引入自定义变量?
【发布时间】:2021-03-24 05:54:26
【问题描述】:

对于网络驱动程序,我们可以执行包含自定义变量的 JavaScript 代码,如下所示:

driver.execute_script("alert('%s')" % variable) # an example introducing variable in alert()

但是如果我需要修改变量的内容,我必须在脚本中写入变量,该怎么办?

更具体地说,我面临以下问题:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

在这段代码中,我必须在脚本中写入document.body.scrollHeight。但我想添加一个随机因子 [0-1]document.body.scrollHeight 相乘,这样滚动似乎不会自动进行。为此,我尝试了以下方法:

import numpy as np
factor = float(np.random.uniform(0, 1))
driver.execute_script("window.scrollTo(0, %s);" % str(np.int(float(document.body.scrollHeight) * factor)))

但这不起作用。由于document.body.scrollHeight 在外面,因此程序找不到document。所以我想在脚本里面引入一个自定义变量factor。该怎么做?

【问题讨论】:

    标签: python-3.x selenium automation


    【解决方案1】:

    请参阅 selenium 文档 here

    要将变量传递到执行脚本中,请使用逗号。 这一点:

    执行脚本(脚本,*args)¶

    同步执行 JavaScript 当前窗口/框架。

    Args: script:要执行的 JavaScript。 *args:任何适用于您的 JavaScript 的参数。用法:driver.execute_script('return document.title;')

    当您访问变量时,您可以使用 arguments[x] 来访问(索引为 0)。 一个很好的例子,你会发现一个常见的例子是:execute_script("arguments[0].click()" , element)。您可以看到script,然后是comma,然后是您要点击的element。但是您可以随意传递。

    解决你的问题。

    有几种方法可以获得滚动高度。 您可以从 selenium 或从 js 获取 body 滚动高度。

    在 js 中执行(因此它与您当前的方法相匹配)您可以在 2 次调用中完成。

    BodyScrollHeight = driver.execute_script("return document.body.scrollHeight;") 
    
    factor = float(np.random.uniform(0, 1))
    driver.execute_script("window.scrollTo(0, %s);" % str(np.int(float(BodyScrollHeight) * factor)))
    

    或 - 使用逗号方法。

    BodyScrollHeight = 100 #calculate your factor here 
    driver.execute_script("window.scrollTo(0, arguments[0]);", BodyScrollHeight) 
    

    我没有机会运行它,但如果它不起作用,请告诉我,我会再看一遍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2017-09-12
      • 2010-11-29
      • 2017-11-04
      相关资源
      最近更新 更多