Как извлечь сведения об экземпляре ec2, такие как имя, память, с веб-сайта aws с помощью python selenium

#python #amazon-web-services #selenium #selenium-webdriver #amazon-ec2

Вопрос:

Я пытался извлечь имена экземпляров ec2 из https://aws.amazon.com/ec2/pricing/on-demand/ использование python selenium.
Я попробовал следующие методы:

  1. find_elements_by_xpath("//*[@id="root"]/div/div/div[2]/div[2]/div/awsui-table/div/div[3]/table/tbody/tr")
  2. tbl_rows = drv.find_elements_by_class_name("awsui-table-row")

Оба метода возвращают пустые результаты. Как я могу это исправить? Приведенный ниже пример кода возвращает нулевые строки

 url = "https://aws.amazon.com/ec2/pricing/on-demand/"
drv = webdriver.Chrome("some path")
drv.get(url)
sleep(3)
drv.maximize_window()
sleep(1)
tbl_rows = drv.find_elements_by_xpath("//tr[@class='awsui-table-row']")
pr("number of rows in table: {}".format(len(tbl_rows)))
 

Комментарии:

1. Знаете ли вы о режиме консоли? Например, в Chrome нажмите F12, чтобы перейти в режим deveoper, и перейдите в консоль. Теперь вы можете ввести любое выражение xpath как $x(«выражение xpath»), и в нем будут перечислены найденные элементы. Для вашего xpath выше это вернет пустой список.

2. Он работает в режиме консоли. Когда я вхожу в xpath в режиме консоли, он правильно указывает на правильный веб — элемент. Но когда я использую тот же xpath в коде, он возвращает пустое значение

3. Ну, у меня есть проблемы, чтобы в это поверить. Определенно, xpath выше не будет работать в консоли Chromium, как вы вложили «. Даже исправив это, я получаю пустой результат, используя упомянутый вами веб-сайт.

4. Не могли бы вы один раз попробовать следующий xpath: «//tr[@class=’awsui-таблица-строка’]»

5. @user2622678 какой элемент вы ищете? что вы подразумеваете под ec2? Я вижу, что оба локатора, которые вы представили в вопросе, соответствуют 20 элементам

Ответ №1:

таблица экземпляров находилась внутри iframe. Я могу извлекать строки таблицы после включения в сценарий следующих операторов:

 iframe = drv.find_element_by_xpath('//*[@id="iFrameResizer0"]')
drv.switch_to.frame(iframe)