Python Selenium - Select 下拉菜单中的值

Python Selenium - Select value from drop down menu

我想 select 下拉菜单中的一个值,其中有多个菜单

我使用以下代码:

# CLICK ARROW
driver.find_element(By.CSS_SELECTOR, '#WIN_7_1000000217 > a:nth-child(3)').click()
# 1ST MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')))
menu_1 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')
actions.move_to_element(menu_1).click().perform()
# 2ND MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(11) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')))
menu_2 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')
actions.move_to_element(menu_2).click().perform()
# 3RD MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')))
menu_3 = driver.find_element(By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')
actions.move_to_element(menu_3).click().perform()

但是我不能select第二个菜单,它的CSS_SELECTOR是:

div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)

有时它是这样工作的,但问题是 CSS_SELECTOR 每次第一个 nth-child 的数字都会改变,有时是 9、11 或 12。 ..有没有办法解决这个问题并找到我想要的元素?

Html 图像中可见的第二个菜单的代码:

<div class="MenuScrollUp" style="background-image: url(&quot;../../../../resources/images/menu_up.gif&quot;); width: 62px; visibility: hidden;"></div>
<div class="MenuTableContainer">
   <table class="MenuTable" style="width: 62px;" cellspacing="0" cellpadding="0">
      <tbody class="MenuTableBody">
         <tr class="MenuTableRow">
            <td class="MenuEntryNameHover" nowrap="">IT Support</td>
            <td class="MenuEntrySubHover" style="background-image:url(&quot;../../../../resources/images/menu_sub.gif&quot;)" arsubmenu="0">&nbsp;</td>
         </tr>
      </tbody>
   </table>
</div>
<div class="MenuScrollDown" style="background-image: url(&quot;../../../../resources/images/menu_down.gif&quot;); width: 62px; visibility: hidden;"></div>

Html ESI 代码 - Espirito Santo Informatica 和 IBM 外包:

<div class="MenuTableContainer">
    <table class="MenuTable" style="width: 174px;" cellspacing="0" cellpadding="0">
        <tbody class="MenuTableBody">
            <tr class="MenuTableRow">
                <td class="MenuEntryName" nowrap="">ESI - Espirito Santo Informatica</td>
                <td class="MenuEntrySub" style="background-image:url(&quot;../../../../resources/images/menu_sub.gif&quot;)" arsubmenu="4">&nbsp;</td>
            </tr>
            <tr class="MenuTableRow">
                <td class="MenuEntryName" nowrap="">IBM Outsourcing</td>
                <td class="MenuEntrySub" style="background-image:url(&quot;../../../../resources/images/menu_sub.gif&quot;)" arsubmenu="5">&nbsp;</td>
            </tr>
        </tbody>
    </table>
</div>

为什么不 xpath ?

//td[contains(text() , 'IT Support')]

像这样:

# 2ND MENU
actions.move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[contains(text() , 'IT Support')]")))).click().perform()