Josh Miller
Josh Miller

Reputation: 19

Python Error Handling With Selenium And Continue Process Again

I am browsing URL using txt file follow.txt and doing click on specific button in website.But the problem is that sometime I am getting error of unable to locate element and unable to click button.

I want that if that error come, it should read second line of txt file and ignore the error.I also tried the code to overcome the problem.But it is still not working properly.I think my code have some problem.How i can solve this problem.Here is my code that i used for error handling.

try:
 f = open('follow.txt', 'r', encoding='UTF-8', errors='ignore')
 line = f.readline()
 while line:
    line = f.readline()
    browser.get(line)
    browser.find_element_by_xpath(""".//*[@id='react-root']/section/main/article/header/div[2]/div[1]/span/button""").click()
    time.sleep(50)
    f.close();
except Exception as e:
    f = open('follow.txt', 'r', encoding='UTF-8', errors='ignore')
    line = f.readline()
    while line:
      line = f.readline()
      browser.get(line)
      browser.find_element_by_xpath(""".//*[@id='react-root']/section/main/article/header/div[2]/div[1]/span/button""").click()
      time.sleep(20)
      browser.find_element_by_tag_name("body").send_keys(Keys.ALT + Keys.NUMPAD2)
      browser.switch_to_window(main_window)
      time.sleep(10)
      f.close();

Upvotes: 0

Views: 1450

Answers (1)

LearnerEarner
LearnerEarner

Reputation: 1020

In the way you have written the answer to a question like... "What happens when there is an error even in the second line?" would be scary. You definitely do NOT want to write as many nested try except blocks as the number of lines in the file.

So, you will need to have the try except on the statement where you would expect an error, which will allow you to use the opened file object without the necessity to reopen the file. Something similar to the following:

 f = open('follow.txt', 'r', encoding='UTF-8', errors='ignore')
 line = f.readline()
 while line:
    line = f.readline()
    browser.get(line)

    try:
        browser.find_element_by_xpath(""".//*[@id='react-root']/section/main/article/header/div[2]/div[1]/span/button""").click()
    except Exception as e:
        print e # Or better log the error

    time.sleep(50)

 browser.find_element_by_tag_name("body").send_keys(Keys.ALT + Keys.NUMPAD2)
 browser.switch_to_window(main_window)
 time.sleep(10)
 f.close();

This should let you to continue with the next line even though there is an error at the time of ".click()". Note that you do not want to close the file when you are not done with reading all that you want from file.

My intention of moving "try except" deep into the logic doesn't mean that you shouldn't use "try except" else where for example while opening file. The more better way is to use 'with' in which case you don't even need to worry about closing the file and handling exceptions while opening the file.

with open('follow.txt', 'r', encoding='UTF-8', errors='ignore') as f:
    ....

Upvotes: 1

Related Questions