Reputation: 5922
I use Regex to retrieve certain content from a search box on a webpage with selenium.webDriver
.
searchbox = driver.find_element_by_class_name("searchbox")
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group()
The code works as long as the search box returns results that match the Regex. But if the search box replies with the string "No results"
I get error:
AttributeError: 'NoneType' object has no attribute 'group'
How can I make the script handle the "No results"
situation?
Upvotes: 26
Views: 162783
Reputation: 8055
This error occurs due to your regular expression doesn't match your targeted value. Make sure whether you use the right form of a regular expression or use a try-catch block to prevent that error.
try:
pattern = r"^.*(?=(\())"
searchbox_result = re.match(pattern, searchbox).group()
except AttributeError:
print("can't make a group")
Thank you
Upvotes: 0
Reputation: 5922
I managed to figure out this solution: omit group()
for the situation where the searchbox reply is "No results"
and thus doesn't match the Regex.
try:
searchbox_result = re.match("^.*(?=(\())", searchbox).group()
except AttributeError:
searchbox_result = re.match("^.*(?=(\())", searchbox)
Upvotes: 30
Reputation: 95958
When you do
re.match("^.*(?=(\())", search_result.text)
then if no match was found, None
will be returned:
Return
None
if the string does not match the pattern; note that this is different from a zero-length match.
You should check that you got a result before you apply group
on it:
res = re.match("^.*(?=(\())", search_result.text)
if res:
# ...
Upvotes: 14