Как извлечь заголовок из заданного тега привязки - PullRequest
1 голос
/ 22 июня 2019

Как получить xpath для извлечения заголовка из этой строки html.

Не получил ничего полезного, потому что cssClass может меняться со временем, поэтому код может сломаться.Я думаю, что, поскольку href и текст в этом теге являются тем именем, которое я хочу извлечь, возможно, используется условие равенства.

<a class="FPmhX notranslate nJAzx" title="ceorackz_adpp" href="/ceorackz_adpp/">ceorackz_adpp</a>

Я хочу, чтобы код на Python был совместимым с использованием вызова API selenium или обычного регулярного выражения для получения заголовка или текста этого тега привязки.

Ответы [ 4 ]

0 голосов
/ 22 июня 2019

Щелкните правой кнопкой мыши элемент HTML в разделе проверки.Затем перейдите к Copy > Copy XPath.Тогда используйте этот код

title = driver.find_element_by_xpath("copied_xpath").get_attribute("title")
href = driver.find_element_by_xpath("copied_xpath").get_attribute("href")
text = driver.find_element_by_xpath("copied_xpath").text
0 голосов
/ 22 июня 2019

Используйте любой xpath из списка ниже:

//a[@title='ceorackz_adpp']

//a[text()='ceorackz_adpp']

//a[@title='ceorackz_adpp' and text()='ceorackz_adpp']
0 голосов
/ 22 июня 2019

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

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

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.notranslate[href='/ceorackz_adpp/']"))).get_attribute("title"))
    
  • Использование LINK_TEXT:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.LINK_TEXT, "ceorackz_adpp"))).get_attribute("title"))
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class, 'notranslate') and @href='/ceorackz_adpp/']"))).get_attribute("title"))
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 22 июня 2019

Я не совсем уверен, но я бы предположил, что, возможно, выражение, подобное:

title="(.+?)">\s*(.+?)\s*<

может быть точкой для начала.

Демо

Test

import re

regex = r"title=\"(.+?)\">\s*(.+?)\s*<"

test_str = "<a class=\"FPmhX notranslate nJAzx\" title=\"ceorackz_adpp\" href=\"/ceorackz_adpp/\">ceorackz_adpp</a>"

matches = re.finditer(regex, test_str, re.DOTALL)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
...