Как получить текстовый элемент в заголовке html с помощью selenium?

#python #html #selenium #firefox

Вопрос:

Я пытаюсь получить имя файла jpg по этой ссылке с помощью selenium (драйвер Firefox). Если я вручную щелкну правой кнопкой мыши по фотографии и загружу ее, имя файла будет 1-002.jpg

Когда я пытаюсь просмотреть html с помощью Firefox, это показывает, что 1-002.jpg находится в разделе <‘head’> <‘title’>. По какой-то причине это не отображается в Chrome.

 <Head>
 <meta name="viewport" content="width=device-width; height=device-height;">
 <link rel="stylesheet" href="resource://content-accessible/ImageDocument.css">
 <link rel="stylesheet" href="resource://content-accessible/TopLevelImageDocument.css">
 <link rel="stylesheet" href="chrome://global/skin/media/TopLevelImageDocument.css">
 <title>1-002.jpg (JPEG Image, 1800amp;nbsp;×amp;nbsp;2546 pixels) — Scaled (40%)</title>
</Head>
 

Однако я не могу получить текст. Пока мои коды приведены ниже

 driver.get(url)

file_name = driver.find_element_by_xpath('/html/head/title')
print(file_name)

 

Я могу получить только <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="384e7def-df66-4f06-9c3a-c5072c2d650f", element="7e0002d0-7bfb-4aed-8558-fdb9c25075d4")>

если я заменю его на file_name = driver.find_element_by_xpath('/html/head/title').text , он ничего не вернет.

Итак, я спрашиваю, как я могу получить нужный текст.

Спасибо.

Ответ №1:

Сначала вам нужно будет проверить в HTMLDOM, есть ли у нас уникальная запись или нет :

Пожалуйста, проверьте в dev tools (Google Chrome), есть ли у нас уникальная запись HTML DOM или нет.

Шаги для проверки:

Press F12 in Chrome -> перейдите в element раздел -> выполните CTRL F -> затем вставьте xpath и посмотрите, element выделяется ли желаемое 1/1 соответствующим узлом.

Для firefox, пожалуйста, проверьте, и шаги должны оставаться неизменными.

Если /html/head/title равно 1/1, то проблема может быть причиной задержки.

Жестко заданный режим сна (не рекомендуется)

Пробная версия кода 1 :

 time.sleep(5)
file_name = driver.find_element_by_xpath('/html/head/title').text
print(file_name)
 

Пробная версия кода 2: (рекомендуется)

 file_name =  WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "/html/head/title"))).text
print(file_name)
 

Другие вещи, которые вы можете попробовать :

Пожалуйста, вызовите .get_attribute('innerText') или .get_attribute('innerHTML') вместо .text , как это :

С помощью innerHTML

 file_name =  WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "/html/head/title"))).get_attribute('innerHTML')
print(file_name)
 

С помощью innerText

 file_name =  WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "/html/head/title"))).text
print(file_name)get_attribute('innerText')
 

Импорт :

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

Комментарии:

1. Спасибо за подробное объяснение. Проблема не связана с проблемой задержки. Я решил проблему с помощью file_name = driver.find_element_by_xpath(‘/html/head/title’).get_attribute(‘innerText’)