如何在driver.execute_script(<HERE>)中引入自定义变量?
How to introduce custom variable(s) inside driver.execute_script(<HERE>)?
对于 Web 驱动程序,我们可以执行 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
。怎么做?
查看 selenium 文档 here。
要将变量传递到您使用逗号的执行脚本中。
这位:
execute_script(script, *args)¶
Synchronously Executes JavaScript in
the current window/frame.
Args: script: The JavaScript to execute.
*args: Any applicable arguments for your JavaScript. Usage: driver.execute_script(‘return document.title;’)
当您访问变量时,您可以使用参数[x] 来访问(索引为 0)。
您会发现一个很好的例子,也是一个常见的例子:execute_script("arguments[0].click()" , element)
。您可以看到 script
,然后是 comma
,然后是您要单击的 element
。不过你想传多少就传多少。
关于你的问题。
有几种方法可以获取滚动高度。
您可以从 selenium 或从 js 获取正文滚动高度。
在 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)
我还没有机会 运行 这个,但如果它不起作用请告诉我,我会再看看。
对于 Web 驱动程序,我们可以执行 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
。怎么做?
查看 selenium 文档 here。
要将变量传递到您使用逗号的执行脚本中。 这位:
execute_script(script, *args)¶
Synchronously Executes JavaScript in the current window/frame.
Args: script: The JavaScript to execute. *args: Any applicable arguments for your JavaScript. Usage: driver.execute_script(‘return document.title;’)
当您访问变量时,您可以使用参数[x] 来访问(索引为 0)。
您会发现一个很好的例子,也是一个常见的例子:execute_script("arguments[0].click()" , element)
。您可以看到 script
,然后是 comma
,然后是您要单击的 element
。不过你想传多少就传多少。
关于你的问题。
有几种方法可以获取滚动高度。 您可以从 selenium 或从 js 获取正文滚动高度。
在 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)
我还没有机会 运行 这个,但如果它不起作用请告诉我,我会再看看。