使用带Python的Selenium选择子菜单href的问题

问题描述 投票:-1回答:1

目标是请求Selenium定向到带有位于子菜单下的地址的新页面。根据OP1OP2的建议,可以如下实现此活动;

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:消息:

在我看来,编译器无法找到给定的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>

附加信息

完整的Xpath到class =“ sub-menu”

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

[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)可以达到类似的目的,但是OP1OP2中提出的技术看起来更紧凑,更简洁。

编辑4:

Dipak所建议,构造了以下代码。等待= WebDriverWait(驱动程序,30)元素= wait.until(EC.element_to_be_clickable((By.XPATH,“ // a [包含(text(),'Permainx LODR')]”)))))ActionChains(driver).move_to_element(element).click()。perform()

wait = WebDriverWait(driver,30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='sub-menu']//a")))
ActionChains(driver).move_to_element(element ).click().perform()

但是,编译器抛出错误

selenium.common.exceptions.TimeoutException:消息:

编辑3:

基于建议tutorialOP 8

    button = self.browser.find_element_by_id("tcl_SiringMenu1_AmbilDuit")
    self.browser.implicitly_wait( 10 )
    ActionChains( self.browser).move_to_element( button ).click( button ).perform( )

抛出错误

selenium.common.exceptions.JavascriptException:消息:javascript错误:无法在“文档”上执行“ elementsFromPoint”:提供的double值是非限定的。

编辑2:

OP7中建议的代码

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

给出错误;

selenium.common.exceptions.TimeoutException:消息:

编辑1:

Dainius所建议

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

出现错误:

selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互

python selenium submenu
1个回答
0
投票
wait = WebDriverWait(driver,30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(),'Permainx LODR')]")))
ActionChains(driver).move_to_element(element ).click().perform()

wait = WebDriverWait(driver,30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='sub-menu']//a")))
ActionChains(driver).move_to_element(element ).click().perform()

注意:请在解决方案中添加以下内容

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
© www.soinside.com 2019 - 2024. All rights reserved.