我试图使用python和selenium自动化基于Web的API(haxball api) 有两个步骤
使用浏览器控制台 F12 按钮访问https://html5.haxball.com/headless后执行此var room = window.HBInit({ roomName: 'botts', maxPlayers: 16 });
。
执行验证码后,我们必须手动解决。
解决后你必须执行另一个脚本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命令时,两个Javascript命令都会成功执行。
答案 0 :(得分:1)
你只能一起使用
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