Selenium 下拉菜单是 div

Selenium dropmenu is div

我正在使用 python+selenium 模拟下拉菜单中的点击选项

这是下拉菜单图片 enter image description here

这里是 3 个不同选项的页面源

<a onclick="DigitSelected('TabMasterContent','N','sub_3','3587822','C')"><table class="chRT"><tbody><tr><td class="chC1p">C</td><td class="chC2p">Hastelloy C-22</td><td class="chC3p">526.00</td><td class="chC4p">73.64</td><td class="chC5p">0</td></tr></tbody></table></a>
<a onclick="DigitSelected('TabMasterContent','N','sub_3','3587823','D')"><table class="chRT"><tbody><tr><td class="chSC1p">D</td><td class="chSC2p">Hastelloy C-4 (2.4610)</td><td class="chSC3p">0.00</td><td class="chSC4p">0.00</td><td class="chSC5p">0</td></tr></tbody></table></a>
<a onclick="DigitSelected('TabMasterContent','N','sub_3','3587824','S')"><table class="chRT"><tbody><tr><td class="chC1p">S</td><td class="chC2p">Stainless steel 316</td><td class="chC3p">0.00</td><td class="chC4p">0.00</td><td class="chC5p">0</td></tr></tbody></table></a>

我想做的只是模拟点击不同的选项。我正在使用 selenium IDE 得到的代码应该是这样的

driver.find_element(By.CSS_SELECTOR, ".chRow:nth-child(2) .chC2p").click()

但我只是想使用代码 select 与选项的第一个字母不同的选项,"C"、"D"、"S",你有没有这样做的好主意? 比如这个,我知道不行

driver.find_element_by_partial_link_text("S").click

诱导 WebDriverWaitelement_to_be_clickable() 并跟随 XPath.

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[.//td[text()='C']]"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[.//td[text()='D']]"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[.//td[text()='S']]"))).click()

您需要导入以下库。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

根据 HTML 你已经分享了所有的子 <td> 标签似乎在单独的 <a> 标签中。现在因为元素是 JavaScript enabled elements to click() on different options you you have to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following xpath :

  • 点击数字的行为C:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(@onclick,'DigitSelected')][./table/tbody/tr/td[text()='C']]")))
    
  • 点击数字行为D:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(@onclick,'DigitSelected')][./table/tbody/tr/td[text()='D']]")))
    
  • 点击数字的行为S:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(@onclick,'DigitSelected')][./table/tbody/tr/td[text()='S']]")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC