0
votes

Comment puis-je rendre mon code plus lisible avec plusieurs sélecteurs CSS

Je cherche un moyen de raccourcir mon code.

Je suis en train de rassembler des valeurs captcha de https://www.ultimateqa.com/complié-page/ et les soumettre pour 3 boîtes CAPTCHA. P>

Puis-je raccourcir mon code à l'aide d'une fonction? Ou devrais-je utiliser différents sélecteurs CSS? P>

for i in range(1):
    cap2 = '#et_pb_contact_form_2 > div.et_pb_contact > form > div > div > p > input'
    captext1= driver.find_element_by_css_selector(cap2).get_attribute("data-first_digit")
    capnumb1 = int(captext1)
    captext2= driver.find_element_by_css_selector(cap2).get_attribute("data-second_digit")
    capnumb2 = int(captext2)
    driver.find_element_by_css_selector(cap2).send_keys(capnumb1 + capnumb2)


0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser le sélecteur qui correspond à tous les 3 cas (juste séparé des sélecteurs CSS avec une virgule) et les gérer dans une boucle:

cap_css = '#et_pb_contact_form_0 > div.et_pb_contact > form > div > div > p > input, #et_pb_contact_form_1 > div.et_pb_contact > form > div > div > p > input, #et_pb_contact_form_2 > div.et_pb_contact > form > div > div > p > input'
cap_list = driver.find_elements_by_css_selector(cap_css)
for cap in cap_list:
    captext1= cap.get_attribute("data-first_digit")
    capnumb1 = int(captext1)
    captext2= cap.get_attribute("data-second_digit")
    capnumb2 = int(captext2)
    cap.send_keys(capnumb1 + capnumb2)


1 commentaires

Bon à savoir! Cela facilite beaucoup les choses, merci :)



2
votes

Peu de notes pythoniques / programmatiques:

  • A pour la boucle avec plage (1) est itération une fois (sur l'élément 0ème); Ainsi, pas très utile en tant que code régulier iTerates une fois de toute façon.
  • Chaque fois que vous voyez un code similaire étant écrit, vous pouvez généralement résumer la logique en code réutilisable.

    Je suis personnellement inconnu avec sélénium et pas si génial avec CSS, mais voici une allez au python: xxx

    laissez-moi savoir dans un commentaire Si cela fonctionne pour vous!

    Utilisation de ma fonction avec la logique combinée CSS combinée de Jason: xxx


1 commentaires

Content de l'entendre! Je n'ai aucune connaissance de selenium haha ​​... aussi, j'ai mis à jour ma réponse pour inclure une fusion de la réponse de Jason et de la mienne. Cela devrait également fonctionner en supposant que le sélecteur combiné soit valide.



-1
votes

Vous pouvez utiliser l'attribut de nom avec l'index de la boucle sous forme de paramètre xxx

ou localiser tout le captcha par nom partiel et itérer sur la liste xxx

Pas besoin de déplacer le champ CAPTCHA à chaque fois, de la localiser une fois et de l'utiliser.


1 commentaires

C'est une autre excellente solution. J'apprends beaucoup, merci: p