无法单击元素Python Selenium

时间:2019-03-11 19:20:27

标签: python-3.x selenium selenium-webdriver

我无法单击该元素。代码中没有让我看到异常跳转到Except Block。在“除了块”中,流控制后的前两行将在范围(sheet.ncols)中用于c:     对于范围内的r(sheet.nrows):此处无法找到或单击xpath。代码输出是 流程结束,退出代码为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.comt/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('sf@df.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)


"""def check_exists_by_xpath(xpath):
    try:
        driver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False

    return True
    """
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()
                        driver.find_element_by_css_selector('.t2').click()
                        #time.sleep(2)
                        #driver.close()

                        lst_window = driver.window_handles
                        h2 = len(lst_window) #h2=2
                        def check_exists_by_xpath(xpath):
                            try:
                                driver.find_element_by_xpath(xpath)
                            except NoSuchElementException:
                                return False
                            return True

                        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']"
                            #css2 = '#create_button'
                            #css3 = '#update_button'
                            if check_exists_by_xpath(xpath2):
                                driver.find_element_by_xpath(xpath2).click()
                                #driver.close()

                            elif check_exists_by_xpath(xpath3):
                                driver.find_element_by_xpath(xpath3).click()
                                #driver.close()

                           #if driver.find_element_by_css_selector(css2):
                            #    driver.find_element_by_css_selector(css2).click()
                            #elif driver.find_element_by_css_selector(css3):
                             #   driver.find_element_by_css_selector(css3).click()

                            #if driver.find_element_by_xpath(xpath2) or driver.find_element_by_xpath(xpath3):
                             #   driver.find_element_by_xpath(xpath2 or xpath3).click()
                              #  driver.close()
                            #elif driver.find_element_by_xpath(xpath3):
                                #driver.find_element_by_xpath(xpath3).click()
                                #driver.close()





                #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])
                        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
                        def check_exists_by_xpath(xpath):
                            try:
                                driver.find_element_by_xpath(xpath)
                            except NoSuchElementException:
                                return False
                            return True
                        #for lst_handle in range(1, h2):
                        for lst_handle in range(2,h2):
                            driver.switch_to.window(lst_window[lst_handle])
                            xpath2 = "//*[@id='create_button']"
                            xpath3 = "//*[@id='update_button']"
                            if check_exists_by_xpath(xpath2):
                                driver.find_element_by_xpath(xpath2).click()
                                #driver.close()

                            elif check_exists_by_xpath(xpath3):
                                driver.find_element_by_xpath(xpath3).click()
                                #driver.close()


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

我的代码有什么问题。 在Excel中,我有n个值(行),因为只有第一个值代码才能成功执行。其余的值都会增加,但

xpath = "//input[@value='Analyze' and contains(@onclick,'" + st_string + "')]"
                #cont = 0
                if driver.find_elements_by_xpath(xpath):

这段代码之后,控件将Excel移回for(循环),并在一段时间后引发ValueError。

except Exception:
    if st == str(st):
        xpath = "//input[@value='Analyze' and contains(@onclick,'" + st + "')]"
        #cont1=0

这里抛出一个异常

Traceback (most recent call last): File "C:/Users/tmou/PycharmProjects/Python/WebScraping/STaTS.py", line 53, in <module> if st == float(st): ValueError: could not convert string to float: '4C17461624' During handling of the above exception, another exception occurred: Traceback (most recent call last):

任何人都可以帮助我,谢谢。

0 个答案:

没有答案