Как найти и щелкнуть элемент - PullRequest
0 голосов
/ 07 января 2019

Я хочу найти (и щелкнуть) элемент "Reoni", но я не знаю, какую функцию использовать для

Я пытался с

driver.find_element_by_class_name("oe_menu_leaf")  

и

driver.find_element_by_class_name("oe_menu_text")

но тогда селен повышает элемент ошибки, не может быть найден, и я попробовал

driver.find_element_by_link_text("Reoni")

Это элемент, который я хочу найти:

<a href="/web#menu_id=86&amp;action=99" class="oe_menu_leaf" data-menu="86" data-action-model="ir.actions.act_window" data-action-id="99">
    <span class="oe_menu_text">
    Reoni
    </span>
</a>

и полный html:

html

Если я не был достаточно ясен или вам нужен мой код, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Поскольку требуемый элемент является динамическим элементом, вам нужно заставить WebDriverWait , чтобы требуемый элемент был активным для кликабельного , и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.oe_menu_leaf[href*='/web#menu_id=']>span.oe_menu_text"))).click()
    
  • Использование XPATH и text():

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='oe_menu_leaf' and starts-with(@href,'/web#menu_id=')]/span[@class='oe_menu_text' and text()='Reoni']"))).click()
    
  • Использование XPATH и normalize-space():

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='oe_menu_leaf' and contains(@href,'/web#menu_id=')]/span[@class='oe_menu_text' and normalize-space()='Reoni']"))).click()
    
  • Примечание : Вы должны добавить следующий импорт:

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

PS : подробное обсуждение можно найти в Selenium «selenium.common.exceptions.NoSuchElementException» при использовании Chrome

0 голосов
/ 07 января 2019

Попробуйте что-то вроде этого:

Нажатие на кнопку

Из Chrome:

Щелкните правой кнопкой мыши «осмотреть» на предмете, который вы пытаетесь найти xpath.

Щелкните правой кнопкой мыши выделенную область на консоли.

Перейти к копированию xpath

selectElem=browser.find_element_by_xpath('x-path-here').click()

Только чтение значений

from bs4 import BeautifulSoup

innerHTML = browser.execute_script("return document.body.innerHTML")
soup = BeautifulSoup(str(innerHTML.encode('utf-8').strip()), 'lxml')
value = soup.find('span', attrs={'class':'fxst-calendarpro fxst-table-s1'}).text
...