Как найти текст элемента в пределах <span>, используя Selenium? - PullRequest
0 голосов
/ 19 апреля 2019

Я довольно новичок в Python и Selenium, и у меня есть мой скрипт, который делает то, что я хочу, но у меня есть текущая кодировка с сайта:

<a onclick="realPostBack('ctl00$ctl00$mainContent$ContentPlaceHolder1$ucHub$ucSearchExplorer$dgContents$ctl00$ctl04$lnkContent', ''); return false;" id="ctl00_ctl00_mainContent_ContentPlaceHolder1_ucHub_ucSearchExplorer_dgContents_ctl00_ctl04_lnkContent" class="hub-content-item" actiontype="Secondary" href="javascript:__doPostBack('ctl00$ctl00$mainContent$ContentPlaceHolder1$ucHub$ucSearchExplorer$dgContents$ctl00$ctl04$lnkContent','')"><span>How to Project Wirelessly in Philly</span></a> 

и я не могу заставить его щелкнуть ссылку.

Я пробовал:

driver.find_element_by_text("How to Project Wirelessly in Philly")

и частичный текст

driver.find_element_by_id("ctl00_ctl00_mainContent_ContentPlaceHolder1_ucHub_ucSearchExplorer_dgContents_ctl00_ctl04_lnkContent")

Я пробовал по тегу, но все возвращает ошибки. Глядя здесь, я видел кое-что с Xpath, но я понятия не имею, как это сделать, но если кто-то здесь делает, то немного поможет с этим, или любой другой простой код, который, я надеюсь, позволяет мне щелкнуть эту ссылку. (Я знаю, что мне придется сделать .click (), чтобы в итоге щелкнуть по нему, но я пока не могу найти элемент)

1 Ответ

1 голос
/ 19 апреля 2019

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

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

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.hub-content-item[id*='SearchExplorer'][actiontype='Secondary']>span")))
    
  • Использование XPATH:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='hub-content-item' and contains(@id,'SearchExplorer')][@actiontype='Secondary']/span[text()='How to Project Wirelessly in Philly']")))
    
  • Примечание : необходимо добавить следующие операции импорта:

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