错误 selenium.common.exceptions.JavascriptException:消息:ReferenceError:房间未定义

Rud*_*udy 5 javascript python api selenium automation

我试图使用 python 和 selenium 自动化基于 Web 的 API(haxball api)有两个步骤

  1. 使用浏览器控制台按钮访问https://html5.haxball.com/headlessF12并执行后var room = window.HBInit({ roomName: 'botts', maxPlayers: 16 });。执行后会出现验证码,我们必须手动解决。

  2. 解决后,您必须执行另一个脚本room.getPlayerList(); ,它将返回一个数组。

当我手动(使用浏览器和控制台)执行这两个步骤时,它可以完美运行,但是当我使用下面的代码(以 15 秒间隔手动解决验证码)进行自动化时,它在 15 秒等待时间(第 7 行)后出现错误)。

from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("https://html5.haxball.com/headless")
time.sleep(5)
driver.execute_script("var room = window.HBInit({ roomName: 'botts', maxPlayers: 16 });")
time.sleep(15)
driver.execute_script("room.getPlayerList();")
Run Code Online (Sandbox Code Playgroud)

第一个 Javascript 执行正常,但第二driver.execute_script("room.getPlayerList();")个出现错误:

“selenium.common.exceptions.JavascriptException:消息:ReferenceError:房间未定义”

但是当我通过浏览器控制台一一输入它们时,这两个Javascript命令都成功执行。

Dru*_*lan 4

你只能一起使用它

from selenium import webdriver
driver=webdriver.Firefox()
driver.get('url')
driver.execute_script("""
    var foo = 'this is a test';
    console.log(foo);
""")
Run Code Online (Sandbox Code Playgroud)

更新

但是如果我们想在另一种execute_script方法中获取变量,我们可以定义变量,window例如:

from selenium import webdriver
driver=webdriver.Firefox()
driver.get('url')
driver.execute_script("""
    window.foo = 'Window variable';
""")

# some code

driver.execute_script("""
    console.log(window.foo);
""")
Run Code Online (Sandbox Code Playgroud)

输出

# In console
Window variable
Run Code Online (Sandbox Code Playgroud)