首页 > 解决方案 > 如何使用 Python 和 Selenium 的另一列根据条件单击展开按钮?

问题描述

下面是我的脚本示例。我正在尝试在网站上测试“世界总计”列的每一行。如果“World Total”在此列中,那么我想单击左侧列中同一行中的可展开按钮。然后这会扩展该列,下一个“世界总计”行将低得多。即我已经改变了XPATHS,我试图弄清楚当它说世界总数时如何动态扩展行。有什么想法吗?

    myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[3]/td[4]')))
    all_rows = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr')
    country = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr/td[4]')
    expand = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr/td[3]')
    
    for x in range(len(driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr'))):
        if driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[' + str(x) + ']/td[4]') == "World Total":
            driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[' + str(x) + ']/td[3]/input').click()

标签: pythonselenium

解决方案


这应该与一些小的变化一起工作 -

  1. 查找元素 - 返回元素的集合。因此,如果您需要查找特定元素,则必须使用 find_element 。
  2. text 方法返回元素中的文本。
  3. 使用 try & except 来处理 selenium 异常(如果找不到元素)
  4. X 索引默认从 0 开始。您可以根据您的 x 路径初始化为 1。

代码应该是这样的,

myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[3]/td[4]')))
all_rows = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr')
country = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr/td[4]')
expand = driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr/td[3]')  
x=1
for x in range(len(all_rows )):
    try:
        if driver.find_element_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[' + str(x) + ']/td[4]').text == "World Total":
            driver.find_element_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_UltraWebTab1__ctl1_grdExpressQuery_GridView1"]/tbody/tr[' + str(x) + ']/td[3]/input').click()
                                
    except NoSuchElementException:
          #Do something here

推荐阅读