我将硒设置为:
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(10)
driver.get('file:///path_to_file')
当我执行脚本时:
data = driver.execute_script('return document.getElementsByClassName("runner-canvas")[1].getContext("2d").getImageData(0,0,600,150);')['data']`
数据全为零:[0,0,0,0, 0,0,0,0 ..., 0,0,0,0]
。
但是当我同时进行屏幕截图时,使用:
driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), '.', 'screenshot.png'))
我可以看到画布已填充。
Canvas加载的游戏直到按下SPACE
才开始。
负责收集画布数据的功能类似于以下内容:
# Somewhere before the __get_data is called
self.document.send_keys(Keys.SPACE) # self.document is set to html document
def __get_data(self):
while self.driver.execute_script("return Runner.instance_.started") == False:
print('Waiting to start')
# data is always empty at this stage
data = self.driver.execute_script('return document.getElementsByClassName("runner-canvas")[1].getContext("2d").getImageData(0,0,600,150);')['data']
rgba = np.array(data).reshape((90000, 4))
b = a[:, 2]
return a.reshape((150, 600))
当我运行它时,我可以在控制台中看到很多'Waiting to start'
,因此我认为这不是时间问题,因为到while
破坏时,应该在游戏中绘制所有内容已经开始。
在运行ChromeDriver 2.46.628411
的Mac上
答案 0 :(得分:0)
为使您试图捕获的图像或从中获取数据的图像没有正确加载,因此您拥有空数据,请执行一件事来找出加载图像并花费那么多时间并增加等待时间,之后,获取数据和屏幕截图
让我们知道是否可行。