#python #selenium #selenium-webdriver
Вопрос:
Я пытаюсь создать небольшой экстрактор чата reddit в качестве небольшого практического проекта, используя Selenium для Python для Google Chrome. Когда я запускаю следующий код,
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get('https://www.reddit.com/chat/')
wait = WebDriverWait(driver, timeout = 60)
wait.until(EC.visibility_of_element_located((By.ID, 'MessageInputTooltip--Container')))
links = driver.find_elements_by_tag_name('a')
print(links)
В качестве вывода я получаю следующее:
[
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="6b958fe3-e950-4ff6-8689-e7174231857b")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="f55a9564-708c-4f0a-9bc1-bed1e4179bf1")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="dddef953-6240-4c77-8216-e34fd4964294")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="fd4fc436-3a9a-4af4-84b9-1ca6473aaa17")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="b3fa9218-4164-4ba3-90d3-51f402d9c5be")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="734b1a3b-f41a-4135-8a44-84bc08552b25")>,
<selenium.webdriver.remote.webelement.WebElement (session="58020598cd778d692bbab9043a1bbc63", element="ed49c27d-8380-4e5d-b2f7-38b5b9645b0a")>
]
Я хочу получить значения href
атрибута из извлеченных тегов привязки, но вместо этого я получаю список этих случайных строк, из которых я не могу получить href
или его значения. Я также пробовал использовать XPath, но он либо дает тот же результат , когда я пишу его таким образом: links = //a[@href]
, либо я получаю NameError: name chat is not defined
, когда я либо указываю какое-либо значение для href
contains()
метода, либо использую его.
В документации Selenium указано, что метод возвращает список веб-элементов. Что это такое, собственно, и что я здесь делаю не так?
Ответ №1:
links = [x.get_attribute('href') for x in driver.find_elements_by_tag_name('a')]
Просто извлеките атрибут href.
Комментарии:
1. Это сработало! Спасибо! Просто продолжение, что
find_elements()
именно означает возврат? Не зная этого, я не мог придумать твоего подхода. Приношу извинения за вопросы новичков.2. Список веб-элементов.