looking for some solutions? You are welcome.

SOLVED: unable to click on the element Python Selenium

Mounika Krishna:

I'm not able to click on the element. The code without letting me to see the Exception jumping to Except Block. In Except block also first 2 lines after flow control is going to for c in range(sheet.ncols): for r in range(sheet.nrows): Here not able to find or click on the xpath. And the code output is Process finished with exit code 0

    from selenium import webdriver
import time
# from selenium.common.exceptions import NoSuchElementException
import xlrd

driver = webdriver.Chrome(r'C:\Users\tmou\PycharmProjects\Python\WebScraping\chromedriver.exe')
driver.maximize_window()
driver.get('https://www.stew.cyz.com/st/st_main.php')
driver.switch_to.frame('ST_mainFrame')
emailElem = driver.find_element_by_xpath('//*[@id="log_main"]/input')

# emailElem=browser.find_element_by_id('log_main')
# emailElem=browser.find_element_by_name("hpuser_id")
emailElem.send_keys('xyn@hyo.com')
# time.sleep(5)
passwordElem = driver.find_element_by_xpath('//*[@id="log_main"]/p[1]/input')
passwordElem.send_keys('********')
passwd = passwordElem.find_element_by_xpath('//*[@id="log_main"]/p[2]/input').click()
driver.switch_to.parent_frame()
driver.switch_to.frame('topFrame')

driver.find_element_by_css_selector(
    '.menu > ul:nth-child(1) > li:nth-child(7) > a:nth-child(1) > span:nth-child(1)').click()  # Reports
driver.switch_to.parent_frame()
driver.switch_to.frame('ST_mainFrame')
driver.find_element_by_css_selector(
    'div.menu_row:nth-child(16) > span:nth-child(3) > label:nth-child(2)').click()  # FTO

driver.switch_to.frame('fto_details')
time.sleep(8)
driver.find_element_by_css_selector('html body table tbody tr td form table tbody tr td a img').click()  # search


path = r'C:\Users\tmou\PycharmProjects\Python\WebScraping\Book2.xlsx'
workbook = xlrd.open_workbook(path)
sheet = workbook.sheet_by_index(0)

for c in range(sheet.ncols):
    for r in range(sheet.nrows):
        st = (sheet.cell_value(r, c))
        try:
            if st == float(st):
                st_string = str(int(st))
                xpath = "//input[@value='Analyze' and contains(@onclick,'" + st_string + "')]"
                # cont = 0
                if driver.find_elements_by_xpath(xpath):
                    driver.find_element_by_xpath(xpath).click()  # Here new window will open
                    handles = driver.window_handles
                    h = len(handles)  # h=2

                    # print(handles)
                    for handle in range(1, h):
                        # for handle in range(h):

                        driver.switch_to.window(handles[handle])
                        driver.find_element_by_xpath(
                            '/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
                        time.sleep(2)
                        driver.close()

                        lst_window = driver.window_handles
                        h2 = len(lst_window)  # h2=3

                        # for lst_handle in range(2,h2):
                        for lst_handle in range(1, h2):
                            driver.switch_to.window(lst_window[lst_handle])
                            xpath2 = '//*[@id="create_button"]'
                            xpath3 = '//*[@id="update_button"]'

                            if driver.find_element_by_xpath(xpath2):
                                driver.find_element_by_xpath(xpath2).click()
                            elif driver.find_element_by_xpath(xpath3):
                                driver.find_element_by_xpath(xpath3).click()

                # cont+=1
            # print(cont)



        # except ValueError:
        except Exception:
            if st == str(st):
                xpath = "//input[@value='Analyze' and contains(@onclick,'" + st + "')]"
                # cont1=0
                if driver.find_elements_by_xpath(xpath):
                    driver.find_element_by_xpath(xpath).click()  # Here new window will open
                    handles = driver.window_handles
                    h = len(handles)  # h=2

                    # print(handles)
                    for handle in range(1, h):
                        # for handle in range(h):

                        driver.switch_to.window(
                            handles[handle])  # /html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input
                        driver.find_element_by_xpath(
                            '/html/body/table/tbody/tr[4]/td/table/tbody/tr[9]/td[3]/input').click()
                        # time.sleep(5)
                        driver.close()

                        lst_window = driver.window_handles
                        h2 = len(lst_window)  # h2=2

                        for lst_handle in range(2, h2):
                            if driver.switch_to.window(lst_window[lst_handle]):
                                driver.find_element_by_xpath('//*[@id="create_button"]').click()
                                driver.close()
                            else:
                                driver.find_element_by_xpath('//*[@id="update_button"]').click()
                                driver.close()

What's wrong with my code. Can anyone help me, Thanks.



Posted in S.E.F
via StackOverflow & StackExchange Atomic Web Robots
Share:

No comments:

Recent