javascript - 错误 selenium.common.exceptions.JavascriptException : Message: ReferenceError: room is not defined

标签 javascript python api selenium automation

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

  1. 访问后https://html5.haxball.com/headless使用浏览器控制台 F12 按钮并执行此 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();")

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

"selenium.common.exceptions.JavascriptException: Message: ReferenceError: room is not defined"

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

最佳答案

只能一起使用

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

更新

但是如果我们想在另一个 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);
""")

输出

# In console
Window variable

关于javascript - 错误 selenium.common.exceptions.JavascriptException : Message: ReferenceError: room is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50861779/

相关文章:

javascript - 在 JavaScript 中处理数组中的最后一项

javascript - 更改子级父级的一部分 - React.js

javascript - innerHTML 是异步的吗?

python - 单击时的 Webdriver WebDriverException/TimeoutException

Python 库在安装到 img build 后在 docker 容器中丢失

javascript - Power BI API 身份验证

windows - 阻止 WM_DEVICECHANGE 调度

ios - 尝试从方法返回协议(protocol)关联类型时出错

c# - 如何在 Webform 中使用 JavaScript 启用禁用字段

python - 我应该如何设置 postman 来测试 python request.post 方法的 API