#python #amazon-web-services #selenium #selenium-webdriver #amazon-ec2
Вопрос:
Я пытался извлечь имена экземпляров ec2 из https://aws.amazon.com/ec2/pricing/on-demand/ использование python selenium.
Я попробовал следующие методы:
find_elements_by_xpath("//*[@id="root"]/div/div/div[2]/div[2]/div/awsui-table/div/div[3]/table/tbody/tr")
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)