2016-12-27 1 views
0

Я пытаюсь выбрать все флажки, которые отображаются на HTML-странице с Python 3.5 и Selenium. Конечная цель, очевидно, заключается в том, чтобы манипулировать ими, но я даже не могу их правильно выбрать.Установите флажок в HTML-странице с Python 3.5 & Selenium

Я не могу просто указать вам точный URL-адрес, потому что это специальная страница на eBay, и вам нужно подключиться к ней. Итак, вот как получить доступ к веб-страницы, которые меня интересуют:

  1. Перейти к https://signin.ebay.co.uk/ws/eBayISAPI.dll
  2. Создать учетную запись или войти в систему
  3. Перейти к http://cgi5.ebay.co.uk/ws/eBayISAPI.dll?SellHub3 при подключении
  4. типа в «iPhone» или любой марки вы хотите, это не имеет значения, и нажмите кнопку «Начать продажу».
  5. Вы находитесь на странице.

Вы можете видеть, что, если вы наберете «iPhone», eBay предлагает Вам выбрать один из всех этих категорий:

Mobile Phones & Communication

Mobile & Smart Phones

Mobile Phone & PDA Accessories > Other Mobile Phone Accessories

Other Phones

Smart Watches

Mobile Phone & PDA Accessories > Cables & Adapters

Mobile Phone Parts

Mobile Phone & PDA Accessories > Chargers & Docks

Mobile Phone & PDA Accessories > Headsets

Mobile Phone & PDA Accessories > Cases & Covers

Wholesale & Job Lots

Other Wholesale & Job Lots

Моя цель состоит в том, чтобы поставить галочку в первый флажок, независимо от того, сколько флажков есть на странице. Я просто хочу проверить первый. Это просто. В этом примере, установите флажок «Мобильные телефоны &».

Я попробовал метод XPATH:

checkBox = driver.find_elements_by_xpath(".//input[@type='checkbox']")

Но когда я пытаюсь печатать (галочка), то она возвращает [] (= ничего). Это странно, потому что в Firefox этот XPATH дает мне именно то, что мне нужно.

Я также попытался выбрать его с именем класса:

checkBox = driver.find_elements_by_class_name('inpChkBox')

Но опять же, это приводит к ничего, когда я пытаюсь напечатать.

Как я могу сгенерировать список всех флажков на странице, чтобы ими управлять после?

Кажется, что идентификаторы, имя и т. Д. Всех флажков уникальны и сгенерированы автоматически, поэтому я не могу просто выбрать их по их идентификатору, значению или имени. Мне нужно что-то, что обнаруживает все флажки на странице и помещает их в список.

Спасибо за любую помощь

+0

вы уверены, что находитесь в правильной 'frame', прежде чем вы получите элемент? –

+0

Привет, Марк, спасибо за ваш ответ. Я новичок в Selenium, поэтому я не уверен в этом. Как я могу убедиться, что это правильный фрейм? – Michael

ответ

0

Я также не уверен, что если страница имеет фреймы, но я обычно делаю это так.

driver.switch_to.default_content() 

прежде чем я нацарапаю элементы. Затем я использую эту функцию для запроса элемента.

def get_element(by_arg, by_method=By.ID): 
    return WebDriverWait(driver, MAX_TIMEOUT).until(
      EC.presence_of_element_located((by_method, by_arg)) 
     ) 

поэтому для вашего случая было бы.

check_box = get_element(".//input[@type='checkbox']", By.XPATH) 
+0

Большое спасибо. Не могли бы вы рассказать мне, как проверить первый флажок? Я просто попробовал свой код, и я добавил 'check_box [0] .click()', и он не работает, он вызывает эту ошибку: selenium.common.exceptions.TimeoutException: Message: – Michael

0

Вы действительно были правы, правильный iframe не был выбран, и поэтому я не смог взаимодействовать с его флажками.

driver.switch_to.frame(driver.find_element_by_id('catFrame')) driver.find_element_by_css_selector('div.idtTopSm tr input').click()

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