Selenium chromedriver返回画布的空数据

时间:2019-02-14 11:56:25

标签: python selenium selenium-chromedriver

我将硒设置为:

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上

1 个答案:

答案 0 :(得分:0)

为使您试图捕获的图像或从中获取数据的图像没有正确加载,因此您拥有空数据,请执行一件事来找出加载图像并花费那么多时间并增加等待时间,之后,获取数据和屏幕截图

让我们知道是否可行。