【问题标题】:how to find javascript link and click on it?如何找到javascript链接并点击它?
【发布时间】:2020-08-04 08:49:00
【问题描述】:

我尝试使用 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')

其中三个是我尝试过但不起作用的代码。我有一个错误 liMessage: no such element: Unable to locate element: {"method":"partial link text","selector":"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>

【问题讨论】:

  • 试试webdriver.find_element('.Menu_L1_Link')。想法是有一个选择器。如果您需要精确,请尝试.find_element(' a.Menu+L1_Link[href="javascript:LoadPage('12')"] ')
  • @Rajesh 它不起作用,因为 class="Menu_L1_Link 中包含 5 个子菜单并出现 .find_element(' a.Menu+L1_Link[href="javascript:LoadPage('12')"] ') 的语法错误
  • @SasiwutChaiyadecha 你能把你的图片发布为html吗?
  • @frianH 已添加,谢谢
  • @SasiwutChaiyadecha 试试webdriver.find_element_by_css_selector('table &gt; tbody &gt; tr &gt; td:nth-child(3) &gt; a').click()

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

所需元素是启用了JavaScript 的元素,因此要单击文本为Security 的元素,您必须将WebDriverWait 诱导为element_to_be_clickable(),您可以使用关注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 中找到一些相关讨论:

【讨论】:

    【解决方案2】:

    尝试使用以下方法:

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

    find_element_by_xpath 可以一行完成,但拆分成两行可以更简单地在字符串中管理 "'

    这假定 web 元素基于提供的 html 是唯一的。 如果有更进一步的错误,或者请分享指向您网站的链接并说明您想要实现的目标。我很乐意支持。

    [快速更新 - 现在我可以复制 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,其中包含文本 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
    

    亮点如下:


    [更新 2 - JS 执行]

    如果你想在浏览器中注入 JS 你可以试试这个:

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

    由于我不在您的路由器上,因此无法尝试此操作,但请试一试并告诉我们。

    【讨论】:

    • 它不起作用,出现错误Unable to locate element: {"method":"xpath","selector":"//a[p[text()="Security"]]"}
    • 它适用于您共享的 html(因此是屏幕截图):-) - 您需要执行任何操作以使菜单可见吗? - 或者,如果您正在苦苦挣扎,您可以分享该网站的链接吗?
    • 如果这是一个基于脚本的网站,你知道如何使用 webdriverwait 吗? (再次 - 很乐意根据您的需要提供帮助)
    • 这不是公共链接先生,我正在尝试使用 moy 路由器自动执行某些任务。我只想点击导航到 javascript 链接的“安全”元素。
    • 不用担心 :-) - 所以我已经更新了 wedriver 等待。您可以尝试一下吗?您能否确认是否需要执行任何其他操作才能使链接出现在屏幕上?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2021-10-18
    • 2012-05-06
    • 1970-01-01
    • 2023-01-10
    • 2017-01-27
    相关资源
    最近更新 更多