2015-05-17 7 views
0

Я пытаюсь контролировать Google Hangouts с Chromedriver Selenium на Python 3.4. Чтобы найти элементы страницы на Google Hangouts start page, я использую find_elements_by_xpath(). Однако, когда я проверяю элемент страницы там, я замечаю, что его значение XPath изменяется со временем. Например, кнопка отключения звука имеет значение XPath, которое, по-видимому, случайным образом сдвигается между //*[@id=":sv.rt"]/div/div[2] и //*[@id=":sw.rt"]/div/div[2].Как я могу использовать веб-редактор Selenium для поиска элементов страницы в Hangouts Google, значения XPath которых со временем меняются со временем?

Я что-то не так? Если нет, может ли кто-нибудь предложить обходное решение (например, найти элемент страницы по его текстовому описанию), чтобы я мог продолжать нажимать кнопку отключения звука/включения, используя ту же команду Python?

+0

Возможно, это связано с тем, что они хотят, чтобы вы использовали [Google Hangouts API] (https://developers.google.com/+/hangouts/getting-started) вместо того, чтобы нарушать их ToS и соскабливать страницу. – abarnert

+0

Имеет ли значение для вас, активно ли они используют код, который пытается очистить страницу, или просто не заботится о том, нарушают ли они код, который зависит от того, что они явно не документируют и, следовательно, меняют его, когда это удобно? – abarnert

+0

@abarnert Извините, новичок здесь. И не слишком уверен в том, что вы имеете в виду со вторым комментарием. Я просто пытаюсь контролировать Hangouts с Python. Итак, если здесь нет обходного пути, и я решил использовать API-интерфейс Google Hangouts, как вы полагаете, мне нужно будет подписаться на Google Cloud (какой AFAIK не свободен после месяца), установить Google Cloud SDK и узнать о том, как использовать Google App Engine и т. д. или просто войти в мою учетную запись Google в каком-то браузере, достаточно для управления Hangouts с Python? –

ответ

0

Попробуйте изменить запрос XPath к чему-то вроде этого

//*[substring(@id, string-length(@id) - string-length('.rt') +1) = '.rt']/div/div[2] 

Может быть проверка, если id заканчивается ".rt" будет достаточно.

+0

Спасибо. Но по какой-то причине это захватывает '// * [@ id =": sv.rt "]/div/div [2]', но не '//*[@id=":sw.rt"]/div/дел [2] '. 'try' и' except', похоже, работают, хотя, как есть небольшое количество случаев, а именно два, которые я знаю до сих пор. –