使用带有 Python 的 Selenium 选择子菜单 href 时出现问题

Issue in selecting sub-menu href using Selenium with Python

objective请求Selenium指向一个新页面,地址位于子菜单下。根据OP1 and OP2的建议,这个activity可以实现如下;

sub_item_drop= WebDriverWait( self.browser, 20 ).until( EC.presence_of_element_located(
    (By.CSS_SELECTOR, "//a[href='/pguna/ambilduit/permainan.aspx’]") ) )
sub_item_drop.click()

编译器没有重定向到新的 url,而是抛出错误;

selenium.common.exceptions.TimeoutException: Message:

在我看来,编译器无法找到给定的 CSS 路径。我可以知道我哪里做错了吗?感谢任何见解。

为了方便排错,下面给出了网站完整的外HTML框架

<li id="tcl_SiringMenu1_sbmenu" class="has-sub">
    <a href="javascript:;">
     <b class="caret pull-right"></b>
     <i class=" tcl tcl -fw tcl -myr"></i>
     <span>Ruang PeluangGame <span class="badge pull-right bg-yellow m-l-4 m-r-4">90000</span> </span>
    </a>

    <ul class="sub-menu" style="display: none;">
        <li id="tcl_SiringMenu1_AmbilDuit">
        <a href="/pguna/ambilduit/permainan.aspx">
        Permainx LODR<span class="badge pull-right bg-green m-l-5 m-r-5">90000</span></a>
        </li>
    </ul>
</li>

附加信息

class="sub-menu"

的完整 Xpath
/html/body/form/div[3]/div[2]/div/div[2]/div[2]/div[1]/ul[2]/li[5]/ul

class badge pull-right bg-green m-l-5 m-r-5 的完整 Xpath 是

/html/body/form/div[3]/div[2]/div/div[2]/div[2]/div[1]/ul[2]/li[5]/ul/li/a/span

p.s., 我知道几种使用鼠标悬停的技术(例如,OP3OP4OP5OP6)实现类似objective,但OP1 and OP2中提出的技术看起来更简洁。

更新的解决方案:

解决方案一:

sub_item_drop= WebDriverWait(self.browser, 20 ).until( 
EC.element_to_be_clickable(
    (By.XPATH, "//a[@href='/pguna/ambilduit/permainan.aspx']") ) )
self.browser.execute_script("arguments[0].click();", sub_item_drop)

方案二:

    element = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[@id='tcl_SiringMenu1_sbmenu']//ul[@class='sub-menu']//a[@href='/pguna/ambilduit/permainan.aspx']")))
    self.browser.execute_script("arguments[0].click();", element)

注意:请将以下导入添加到您的解决方案

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