#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’)