J'utilise Regex pour récupérer certains contenus d'une boîte de recherche sur une page Web avec Selenium.webDriver
.
searchbox = driver.find_element_by_class_name("searchbox")
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group()
Le code fonctionne tant que la zone de recherche renvoie des résultats qui correspondent à l'expression régulière. Mais si le champ de recherche répond avec la chaîne "No results"
J'obtiens une erreur:
AttributeError: l'objet 'NoneType' n'a pas d'attribut 'group'
Comment puis-je faire en sorte que le script gère le "No results"
situation?
J'ai réussi à comprendre cette solution, il s'agissait de négliger group()
pour la situation où la réponse du champ de recherche est "No results"
et ne correspond donc pas au Regex.
try:
searchbox_result = re.match("^.*(?=(\())", searchbox.group()
except AttributeError:
searchbox_result = re.match("^.*(?=(\())", searchbox)
ou simplement:
try:
searchbox_result = re.match("^.*(?=(\())", searchbox.group()
except:
searchbox_result = None
Quand tu fais
re.match("^.*(?=(\())", search_result.text)
alors si aucune correspondance n'a été trouvée, None
sera retourné:
Renvoie
None
si la chaîne ne correspond pas au modèle; notez que ceci est différent d'une correspondance de longueur nulle.
Vous devez vérifier que vous avez obtenu un résultat avant d'appliquer group
dessus:
res = re.match("^.*(?=(\())", search_result.text)
if res:
# ...