簡體   English   中英

錯誤selenium.common.exceptions.JavascriptException:消息:ReferenceError:未定義房間

[英]Error selenium.common.exceptions.JavascriptException: Message: ReferenceError: room is not defined

我試圖使用python和selenium自動化基於Web的API(haxball api)有兩個步驟

  1. 使用瀏覽器控制台F12按鈕訪問https://html5.haxball.com/headless后執行此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:消息:ReferenceError:未定義房間”

但是當我通過瀏覽器控制台逐個輸入時,兩個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM