Мне нужно найти значение в элементе Dynami c h1 в селене python - PullRequest
0 голосов
/ 07 мая 2020

Я использую python 2.7, Firefox и селен 3.11

У меня есть следующая строка с номером Dynami c в качестве идентификатора:

<div class="class1" dojoattachpoint="titleText" dojoattachevent="onmouseover:_mouseOverTitle,onmouseout:_mouseOutTitle,onmousedown:_mouseDownTitle">
<h1 id="_N90399546_title">‪textToFind</h1>

Я хочу найдите textToFind.

Я пробовал следующее:

  1. x= driver.find_element_by_xpath("//h1[@id='dynamicNumber']") -> который я пытался, когда число Dynami c было таким же, чтобы увидеть, это сработало, но не ...

    Результат: textToFind не найден

  2. x= driver.find_element_by_link_text('textToFind') -> не работал в динамическом режиме c поиск

    Результат: textToFind не найден

  3. x = driver.find_element_by_xpath("//*[@class='class1'][contains(text(),'textToFind')]")

    Результат: textToFind не найден

  4. x = driver.find_element_by_xpath("//*[@class='class1'][contains(text(),'textToFind')]").getAttribute("innerHTML")

    Результат: textToFind не найден

  5. x = driver.find_element_by_xpath("//*[@class='class1']")

    Результат: textToFind не найден

Мне не нужно извлекать текст, получать атрибуты или что-то еще, мне просто нужно найти строку «textToFind». Я действительно ценю помощь.

Я искал несколько руководств по selenium Dynami c, просматривал десятки веб-сайтов, искал несколько похожих сообщений в stackoverflow, и я не могу найти нужный мне текст.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вы можете попробовать следующий css селектор.

print(driver.find_element_by_css_selector("div.class1>h1").text)
1 голос
/ 07 мая 2020
  1. Если у вас есть исправленная текстовая строка ( textToFind в вашем случае). Затем go вперед со следующим xpath:

    x = driver.find_element_by_xpath("//div[@class='class1']/h1[contains(text(),'textToFind')]")
    
  2. Если id не полностью динамический c. Означает, что если он добавляет какой-то динамический c номер или алфавиты, начало, конец или середину. например, <h1 id="some-prefix-132dsad233">, тогда вы используете следующее частичное совпадение с использованием селектора CSS:

    • если исправить строку префикса, например, id="some-prefix-132dsad233", то x = driver.find_element_by_css_selector("h1[id^='some-prefix']")

    • если исправить строку постфикса, например, id="132dsad233some-postfix", то x = driver.find_element_by_css_selector("h1[id$='some-postfix']")

    • соответствует некоторому тексту исправления в идентификаторе, например id="132dsad233some-postfix", затем x = driver.find_element_by_css_selector("h1[id*='some']")

Вы также можете использовать комбинацию обоих, например, id="hello132dsad233some-postfix" затем x = driver.find_element_by_css_selector("h1[id^='hello'][id$='postfix']")

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

...