Хромированный драйвер Selenium не выполняет событие onclick - PullRequest
0 голосов
/ 21 июня 2019

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

  • План медицинского страхования (Выбрать);
  • Адрес штата (Выбрать)
  • Адрес города (динамический выбор с данными, загруженными в предыдущее поле)
  • Поиск по (радиокнопка)

В Chrome эта кнопка переключает нас на другой интерфейс (с тем же URL), но в Chromedriver это не так.

Я проверил код в этой радиокнопке и получил событие onclick:

jsf.ajax.request('viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formInicio:tipoPesquisa',event,{execute:'@this viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formInicio:panelgrid-g-recaptcha-response ',render:'viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formBuscaSobreOMapa viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formInicio viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formInicio:panelGridSelectOneRadioTipoPesquisa ',onerror:mostrarErroGenerico,onevent:selecionarTipoPesquisa,'javax.faces.behavior.event':'click'})

Как мне пройти этот шаг?

(Я попытался запустить этот код JavaScript в строке URL и выполнить все шаги вручную, но не работает.)

Весь мой код:

#!/usr/bin/env python
# coding: utf-8

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Create a browser instance
gc = webdriver.Chrome()
gc.maximize_window()

# Open the url
gc.get('https://www.bradescoseguros.com.br/clientes/produtos/plano-saude/consulta-de-rede-referenciada')

time.sleep(2)

# Select "Non Client" mode
non_client = gc.find_element_by_name('viewns_Z7_MPD81G80P843E0QQK0CK5L2GC1_:formInicio:clNotClient')
non_client.click()

time.sleep(2)

# Get plans
lp = gc.find_element_by_id('lista-redes')
lp_list = lp.find_element_by_tag_name('ul')
lp_options = lp_list.find_elements_by_tag_name('li')
lp_options[0].click()

time.sleep(2)

# Select states
le = gc.find_element_by_id('lista-estado')
le_list = le.find_element_by_tag_name('ul')
le_options = le_list.find_elements_by_tag_name('li')

states_dict = {
    'ACRE': '00',
    'ALAGOAS': '01',
    'AMAZONAS': '02',
    'AMAPA': '03',
    'BAHIA': '04',
    'CEARA': '05',
    'DISTRITO FEDERAL': '06',
    'ESPIRITO SANTO': '07',
    'GOIAS': '08',
    'MARANHAO': '09',
    'MINAS GERAIS': '10',
    'MATO GROSSO DO SUL': '11',
    'MATO GROSSO': '12',
    'PARA': '13',
    'PARAIBA': '14',
    'PERNANBUCO': '15',
    'PIAUI': '16',
    'PARANA': '17',
    'RIO DE JANEIRO': '18',
    'RIO GRANDE DO NORTE': '19',
    'RONDONIA': '20',
    'RORAIMA': '21',
    'RIO GRANDE DO SUL': '22',
    'SANTA CATARINA': '23',
    'SERGIPE': '24',
    'SAO PAULO': '25',
    'TOCANTINS': '26'
}

# Select SP state
le_options[25].click()

time.sleep(2)

# Select cities
lc = gc.find_element_by_id('lista-cidade')
lc_list = lc.find_element_by_tag_name('ul')
lc_options = lc_list.find_elements_by_tag_name('li')

i = 0
for c in lc_options:
    print('ID: {}\nCidade:{}\n'.format(i, c.find_element_by_tag_name('a').text))
    i+=1

lc_options[110].click()

time.sleep(2)

# Select a establishment
les = gc.find_element_by_id('lista-tipo-pesquisa')
les_options = les.find_elements_by_xpath('//input[@type="radio"]')

i = 0
for r in les_options:
    print('ID: {}\nOpcoes:{}\n'.format(i, r.get_attribute('value')))
    i+=1

time.sleep(2)

les_options[2].click()

#gc.find_element_by_class_name('form').find_element_by_tag_name('form').submit()

# Close Browser
#gc.quit()

1 Ответ

0 голосов
/ 22 июня 2019

Вот скрипт, который тестировался и работал без нареканий.

driver.find_element_by_class_name("clNotClient").click()
# wait until the loading is done
WebDriverWait(driver,10).until_not(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
listItems = driver.find_elements_by_css_selector("#lista-redes  .list-group-item.ui-menu-item")
listItems[0].click()


# wait until the loading is done
WebDriverWait(driver,10).until_not(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
npList = driver.find_elements_by_css_selector(".tbl-dados .list-group-item.ui-menu-item")
npList[25].click()

# wait until the loading is done
WebDriverWait(driver,10).until_not(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
#cities
cities = driver.find_elements_by_css_selector("#lista-cidade li.list-group-item.ui-menu-item")
cities[-1].click()

# wait until the loading is done
WebDriverWait(driver,10).until_not(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,".panelGridRecaptchaResponse[style*='display: none'] img")))
# select radio
radios = driver.find_elements_by_css_selector("#lista-tipo-pesquisa input[type='radio']")
radioNumber = 1
for radio in radios:
    print ("Radion " + str(radioNumber) + ":- " + radio.find_element_by_xpath("./following-sibling::label").text)
    radioNumber = radioNumber+1
radios[2].click()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...