Извлечение текста из элемента span с использованием селена в python - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь извлечь контактный номер (XXXXX-XXXXXX) из следующего HTML кода с помощью метода find_element_by_xpath Selenium.

 <div id="contact-info">
                    <div class="a">
                        <div class="b">
                            <table class="c">
                                <tr>
                                    <td class="d">
                                        <div class="e">Contact Info</span></div>
                                    </td>
                                    <td class="f">
                                        <div></div>
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <div class="g">
                            <div class="h">
                                <table>
                                    <tr>
                                        <td>
                                            <div class="i"><span class="j">Mobile</span></div>
                                        </td>
                                        <td class="k">
                                            <div class="random_class_name"><span><span dir="ltr">XXXXX-XXXXXX</span></span>
                                            </div>
                                        </td>
                                    </tr>
                                </table>
                            </div>

Это мой код для извлечение требуемых данных -

print(browser.find_element_by_xpath('//div[@id="contact-info"]/div[1]/div[2]/div[1]/div[2]/span[1]/span[1]').text)

Но я получаю исключение, в котором говорится, что элемент не может быть найден. Что я тут не так делаю? Как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

Чтобы получить Mobile-Number, вы можете взять ссылку на текст Mobile и найти следующего брата.

Индуцировать WebDriverWait () и ждать visibility_of_element_located () и следующего xpath.

print(WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.XPATH,"//td[.//div[contains(.,'Mobile')]]/following-sibling::td[1]/div"))).text)

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
1 голос
/ 08 апреля 2020
contactNumber = WebDriverWait(browser, 30).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@class='random_class_name']//span[1]//span")))
print contactNumber.text

или

contactNumber = WebDriverWait(browser, 30).until(
    EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'XXXXX-XXXXXX')]")))
print contactNumber.text

Примечание : добавьте следующие импорта в ваше решение:

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

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

iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
1 голос
/ 08 апреля 2020

Исправьте ваш XPath с помощью:

print(browser.find_element_by_xpath('//span[@dir="ltr"]').text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...