У меня есть селен, настроенный как:
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
перерывов все должно быть нарисовано, так как игра уже началась.
Я на Mac работает ChromeDriver 2.46.628411