如何通过Seleniumpython初始化JS变量?

How to initialize JS variables through Selenium python?

我正在尝试通过 python、selenium 执行一个 JS 文件,但我想我错过了一些东西。

我试图从 Safari 控制台调用 checking 变量,但它显示以下错误 Can't find the checking variable.

我也尝试执行以下代码行 driver.execute_script('var checking=0;') 但是当我尝试从 Safari 控制台调用 checking 变量时我得到了相同的结果。

PYTHON 代码

driver.execute_script(open("/Users/Paul/Downloads/pythonProject/Social media/javascripts/Initializing Variables.js").read())

JS 文件

var checking;
function Checking(item) {
    if (item) {
        checking = true;
    }
    else {
        checking = false;
    }
}

有什么想法吗?

所有变量将仅在单个 execute_script 命令上下文中可用。因此,不可能在一个驱动程序命令中定义变量并修改它或通过另一个驱动程序命令获取,除非您将数据放入文档、本地存储或会话存储..

但是您可以声明变量并将其放入变量中,只是不要忘记 return 它在脚本中的值。

如果我用 driver.execute_script

执行这个脚本
var a;
function setAValue(arg) {
    a = arg;
}

setAValue(100);
return a;

你会在输出结果中得到 100。

如果您想从脚本中 运行 您的文件,文件应该以函数调用和 return 语句结尾。

在脚本之间共享函数和变量

这是 groovy 语言的工作示例(抱歉没有 python env)

WebDriverManager.chromedriver().setup()
WebDriver driver = new ChromeDriver()

driver.get("https://whosebug.com/")
//define variable date and function GetTheDatesOfPosts 
driver.executeScript('''
    document.date = [];
    document.GetTheDatesOfPosts = function (item) { document.date = [item];}
''')

//use them in new script
println (driver.executeScript('''
    document.GetTheDatesOfPosts(7);
    return document.date;
    '''))
driver.quit()

它打印 [7].

这里有一个关于局部变量和全局变量的快速教程。

如果您 运行 命令如下:

self.execute_script("var xyz = 'abc';")

然后去控制台找xyz, 不会有(xyz is not defined).

但是,如果您 运行:

self.execute_script("document.xyz = 'abc';")

然后如果您键入 document.xyz,它将出现在浏览器控制台中。

这是简短的总结。如果您只是尝试在 execute_script 的 运行 时声明一个局部变量,那么它将在脚本 运行 之后变为 out-of-scope。但是,如果您将一个变量附加到一个持久变量,这是保持变量(并且仍然可以访问)的一种方法。