Buenas tardes necesito ayuda con el código del bot en python que estoy intentando editar.
El bot es de la siguiente página:
Nie Bot
El problema este bot esta desactualizado,he estado modificando el código para que funcione con la nueva web de extranjería,pero en el apartado de seleccionar país no sé como hacer que seleccione el país que quiero.
Adjunto código que he editado.
El problema es que cuando llega a elegir país no selecciona el país que definí.
Si alguien sabe como corregir eso.
Falla en :
Select(driver.find_element_by_id("txtPaisNac")
).select_by_visible_text(country)
driver.find_element_by_xpath("//option[@value='214']")
Y se reinicia.
El bot es de la siguiente página:
Nie Bot
El problema este bot esta desactualizado,he estado modificando el código para que funcione con la nueva web de extranjería,pero en el apartado de seleccionar país no sé como hacer que seleccione el país que quiero.
Adjunto código que he editado.
from selenium import webdriver | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.common.keys import Keys | |
from selenium.webdriver.support.ui import Select | |
from selenium.common.exceptions import NoSuchElementException | |
from selenium.common.exceptions import NoAlertPresentException | |
from selenium.webdriver.support.ui import WebDriverWait | |
from selenium.webdriver.chrome.options import Options | |
import unittest | |
import time | |
import re | |
import os | |
from random import randrange | |
import json | |
phone = "" | |
email = "" | |
name = "" | |
expiration_date = "" | |
nie_number = "" | |
country = "" | |
class AppDynamicsJob(unittest.TestCase): | |
def setUp(self): | |
# AppDynamics will automatically override this web driver | |
# as documented in https://docs.appdynamics.com/display/PRO44/Write+Your+First+Script | |
self.driver = webdriver.Chrome() | |
chrome_options = Options() | |
chrome_options.add_experimental_option("detach", True) | |
self.driver.implicitly_wait(30) | |
self.base_url = "https://www.google.com/" | |
self.verificationErrors = [] | |
self.accept_next_alert = True | |
def test_app_dynamics_job(self): | |
driver = self.driver | |
driver.get( | |
"https://icp.administracionespublicas.gob.es/icpplus/index.html") | |
driver.find_element_by_id("form").click() | |
Select(driver.find_element_by_id("form") | |
).select_by_visible_text("Madrid") | |
driver.find_element_by_xpath( | |
"//option[@value='/icpplustiem/citar?p=28&locale=es']").click() | |
driver.find_element_by_id("btnAceptar").click() | |
Select(driver.find_element_by_id("tramiteGrupo[1]")).select_by_visible_text( | |
u"POLICIA-TOMA DE HUELLAS (EXPEDICIÓN DE TARJETA), RENOVACIÓN DE TARJETA DE LARGA DURACIÓN Y DUPLICADO") | |
driver.find_element_by_xpath("//option[@value='4010']").click() | |
aceptar = driver.find_element_by_id("btnAceptar") | |
driver.execute_script("arguments[0].click();", aceptar) | |
entrar = driver.find_element_by_id("btnEntrar") | |
driver.execute_script("arguments[0].click();", entrar) | |
driver.find_element_by_id("txtIdCitado").click() | |
driver.find_element_by_id("txtIdCitado").clear() | |
driver.find_element_by_id("txtIdCitado").send_keys(nie_number) | |
driver.find_element_by_id("txtDesCitado").clear() | |
driver.find_element_by_id( | |
"txtDesCitado").send_keys(name) | |
driver.find_element_by_id("txtPaisNac").click() | |
Select(driver.find_element_by_id("txtPaisNac") | |
).select_by_visible_text(country) | |
driver.find_element_by_xpath("//option[@value='214']") | |
driver.find_element_by_id("txtFecha").send_keys() | |
enviar = driver.find_element_by_id("btnEnviar") | |
driver.execute_script("arguments[0].click();", enviar) | |
# Solicitar Cita | |
enviar = driver.find_element_by_id("btnEnviar") | |
driver.execute_script("arguments[0].click();", enviar) | |
sede = Select(driver.find_element_by_id("idSede")) | |
allOptions = [o.text for o in sede.options] | |
idx = randrange(1, len(allOptions)) | |
# for option in range(1,len(allOptions)): | |
sede.select_by_index(idx) | |
siguiente = driver.find_element_by_id("btnSiguiente") | |
driver.execute_script("arguments[0].click();", siguiente) | |
#Telefono | |
driver.find_element_by_id("txtTelefonoCitado").send_keys() | |
driver.find_element_by_id("emailUNO").send_keys(email) | |
driver.find_element_by_id("emailDOS").send_keys(email) | |
siguiente = driver.find_element_by_id("btnSiguiente") | |
driver.execute_script("arguments[0].click();", siguiente) | |
text = "En este momento no hay citas disponibles." | |
ndisp = driver.find_elements_by_xpath( | |
"//*[contains(text(),'" + text + "')]") | |
if len(ndisp) <= 0: | |
# if len(ndisp) > 0: | |
os.system('say "Appointment Found."') | |
while(True): | |
pass | |
else: | |
print(f'Not Found {allOptions[idx]}') | |
def is_element_present(self, how, what): | |
try: | |
self.driver.find_element(by=how, value=what) | |
except NoSuchElementException as e: | |
return False | |
return True | |
def is_alert_present(self): | |
try: | |
self.driver.switch_to_alert() | |
except NoAlertPresentException as e: | |
return False | |
return True | |
def close_alert_and_get_its_text(self): | |
try: | |
alert = self.driver.switch_to_alert() | |
alert_text = alert.text | |
if self.accept_next_alert: | |
alert.accept() | |
else: | |
alert.dismiss() | |
return alert_text | |
finally: | |
self.accept_next_alert = True | |
def tearDown(self): | |
# To know more about the difference between verify and assert, | |
# visit https://www.seleniumhq.org/docs/06_test_design_considerations.jsp#validating-results | |
self.assertEqual([], self.verificationErrors) | |
if __name__ == "__main__": | |
with open('data.json') as f: | |
data = json.load(f) | |
print(data) | |
phone = data['phone'] | |
email = data['email'] | |
name = data['name'] | |
expiration_date = data['expiration_date'] | |
nie_number = data['nie_number'] | |
country = data['country'] | |
# unittest.main() | |
def suite(num): | |
suite = unittest.TestSuite() | |
for i in range(num): | |
suite.addTest(AppDynamicsJob('test_app_dynamics_job')) | |
return suite | |
runner = unittest.TextTestRunner() | |
runner.run(suite(10000)) |
El problema es que cuando llega a elegir país no selecciona el país que definí.
Si alguien sabe como corregir eso.
Falla en :
Select(driver.find_element_by_id("txtPaisNac")
).select_by_visible_text(country)
driver.find_element_by_xpath("//option[@value='214']")
Y se reinicia.