如何找到javascript链接并单击它?

2024-05-19 07:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我曾尝试将selenium与python结合使用来自动化一些任务。程序将通过单击链接javascript:LoadPage('12')来导航该链接。然而,我不能用硒。我的代码如下,有任何建议请帮忙

webdriver.find_element_by_partial_link_text('Security')
webdriver.find_element_by_link_text("javascript:LoadPage('12')")
webdriver.find_element_by_link_text('Security')

其中三个是我尝试过的代码,但不起作用。我出了个错误

先谢谢你

Edit1:添加html代码

<table height="40px" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td width="90px" height="40px" bgcolor="#d8d8d8">
                <a href="javascript:LoadPage('0')" target="" class="Menu_L1_Link">
                    <p align="center">Status</p>
                </a>
            </td>
            <td width="90px" height="40px" bgcolor="#d8d8d8">
                <a href="javascript:LoadPage('6')" target="" class="Menu_L1_Link">
                    <p align="center">Network</p>
                </a>
            </td>
            <td width="90px" height="40px" bgcolor="#FFC000">
                <a href="javascript:LoadPage('12')" target="" class="Menu_L1_Active">
                    <p align="center">Security</p>
                </a>
            </td>
            <td width="90px" height="40px" bgcolor="#d8d8d8">
                <a href="javascript:LoadPage('19')" target="" class="Menu_L1_Link">
                    <p align="center">Application</p>
                </a>
            </td>
            <td width="90px" height="40px" bgcolor="#d8d8d8">
                <a href="javascript:LoadPage('26')" target="" class="Menu_L1_Link">
                    <p align="center">Management</p>
                </a>
            </td>
        </tr>
    </tbody>
</table>

Tags: l1targetlinkjavascriptwidthclasstdmenu
2条回答

所需的元素是启用了JavaScript的元素,因此要单击文本为Security的元素,必须为element_to_be_clickable()引入WebDriverWait,并且可以使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td>a[class^='Menu_L1'][href*='12']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td/a[starts-with(@class, 'Menu_L1_')]/p[text()='Security']"))).click()
    
  • 注意:您必须添加以下导入:

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

参考资料

你可以在以下网站上找到关于NoSuchElementException的一些相关讨论:

尝试使用以下方法:

hrefText= "javascript:LoadPage('12')"
driver.find_element_by_xpath("//a[@href='" + hrefText + "']")

find_元素\u by_xpath可以作为一行来完成,但是通过在字符串中管理"',将其拆分为两行会更简单

这假设基于提供的html,webelement是唯一的。 如果有其他错误,请共享指向您的站点的链接,以及您尝试实现的步骤。我很高兴支持你

[快速更新-另一种方法现在我可以复制html代码] [更新-将其包装在webdriverwait中] 使用此xpath将允许您通过文本进行选择

#driver.find_element_by_xpath('//a[p[text()="Security"]]')
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[p[text()="Security"]]')))

这是包含pa,该p具有文本Security(区分大小写)

对于webdriverwait,您需要以下导入:

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

重点如下: devtools


[更新2-JS执行]

如果要将JS注入浏览器,可以尝试以下操作:

driver.execute_script("javascript:LoadPage('12')")

我不能尝试这个,因为我不在你的路由器上,但是试一下,让我们知道

相关问题 更多 >

    热门问题