как найти ссылку javascript и щелкнуть по ней? - PullRequest
0 голосов
/ 04 августа 2020

Я попытался использовать селен с 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')

Три из них - это коды, которые я пробовал, но они не работают. У меня что-то ошибка li Message: no such element: Unable to locate element: {"method":"partial link text","selector":"Security"}

Заранее спасибо.

Edit1: Добавить html code

<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>

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Желаемый элемент - это активированный элемент JavaScript, поэтому, чтобы щелкнуть элемент с текстом как Security , вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование 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 в:

0 голосов
/ 04 августа 2020

Попробуйте использовать следующее:

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

find_element_by_xpath может быть выполнен как одна строка, но разделение на две строки упрощает управление " и ' внутри строк

Предполагается, что веб-элемент уникален на основе предоставленного 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"]]')))

Это a, который содержит 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

Выделение так: инструменты разработчика

[обновление 2 - JS выполнение]

Если вы хотите ввести JS в браузер, вы можете попробовать следующее:

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

Я не могу попробовать это как Я не использую ваш роутер, но поставьте ему go и сообщите нам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...