Цикл выпадающих с использованием селена в Python - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь смоделировать выбор нескольких опций в онлайн-инструменте данных, который заканчивается загрузкой таблицы Excel с учетом ваших фильтров.

В настоящее время я использую селен и идентифицирую xpaths.

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

Веб-сайт для контекста: https://data.cms.gov/mapping-medicare-disparities

Кто-нибудь знает о функции, которая может быть выполнена в селене, которыйбудет работать?

Моя текущая стратегия состоит в том, чтобы создавать списки с xpath, а затем пытаться выполнить функцию перестановки, чтобы получить все комбинации.Однако это не сработало, потому что функция: b.find_element_by_xpath разрешает только один xpath за раз.

примеры списков:

география округа штат / территория

G1 = '// select [@ id = "geography"] // option [@ value = "c"] 'G2 =' // select [@ id =" geography "] // option [@ value =" s "] '

Geo = [G1, G2]

создание пулакомбинаций

импорт itertools из itertools импорт продукта

для перми в продукте (Geo, Adjust, Analysis, Domain): печать (perm)

фактический код для использования селена1029 * **from** selenium **import** webdriver **from** selenium.webdriver.common.keys **import** Keys b = webdriver.Firefox() код для щелчка по всплывающему

pop_up = b.find_element_by_xpath('/html/body/div[1]/button')
pop_up.click()

коду, пытающемуся использовать xpath для одновременного выбора всех параметров

b.find_element_by_xpath(('//select[@id="geography"]//option[@value="c"],
'//select[@id="adjust"]//option[@value="1"],'//select[@id="analysis"]
//option[@value="base"],'//select[@id="domain"]//option[@value="d1"]'))

сообщение об ошибке: InvalidArgumentException: Сообщение:недопустимый тип: sequence, ожидаемая строка в строке 1 столбца 28

Это потому, что find_element_by_xpath (я предполагаю) будет смотреть только на 1 xpath за раз.

1 Ответ

1 голос
/ 26 марта 2019

ваш синтаксис в коде, пытающемся использовать xpath ... в любом случае неверен, но вы можете просто поместить все xpath в список и просмотреть его.

xpathlist=['//select[@id="geography"]//option[@value="c"]', '//select[@id="adjust"]//option[@value="1"]',.....]

for xp in xpathlist:
    b.find_element_by_xpath(xp)
    #then add code to click or download or whatever
...