Хромированный драйвер Selenium возвращает пустые данные для canvas - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть селен, настроенный как:

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

1 Ответ

0 голосов
/ 14 февраля 2019

Думается, что изображение, которое вы пытаетесь захватить или получить от него данные, не загружено должным образом, поэтому у вас есть пустые данные, нужно сделать одну вещь, узнать, сколько времени занимает загрузка изображения, и добавить столько времени ожидания иПосле этого получите данные и снимок экрана

Дайте нам знать, если работает или нет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...