Проблема в выборе href подменю с помощью Selenium с Python - PullRequest
0 голосов
/ 22 апреля 2020

Цель - запрос Selenium, чтобы перейти на новую страницу с адресом, который находится в подменю. В соответствии с предложением OP1 и OP2 , это действие может быть достигнуто следующим образом:

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

Полный Xpath к классу badge pull-right bg-green m-l-5 m-r-5 равен

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

пс, я знаю несколько методов с использованием зависания мыши (например, OP3 , OP4 , OP5 , OP6 ) для достижения аналогичной цели, но метод, предложенный в OP1 и OP2 выглядит более компактно и аккуратно.

1 Ответ

2 голосов
/ 22 апреля 2020

Обновленное решение:

Решение 1:

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)

Решение 2:

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