2016-10-15 6 views
1

Я считаю, что трудно получить содержимое тега комментария к <!-- stuff --> HTML, включенных в head теге HTML-страницы с помощью питона 2,7 и селена.Получить содержимое HTML тега комментария с селеном

<head> 
    <!-- I would like to get this sentence --> 
    [...] 
</head> 

Я получил XPath этого комментария, используя FirePath/FireBug (так что я предполагаю, что это правильно): html/head/comment()[1].

Тогда:

  • это given_driver.find_element_by_xpath('html/head/comment()[1]') дает мне InvalidSelectorException говоря Message: The given selector html/head/comment()[1] is either invalid or does not result in a WebElement. The following error occurred: InvalidSelectorError: The result of the xpath expression "html/head/comment()[1]" is: [object Comment]. It should be an element.
  • это head_element = given_driver.find_element_by_xpath('html/head') затем дает мне весь HTML код в head тег с head_element.get_attribute('innerHTML') как: u'<!-- I would like to get this sentence -->\n [...]

Но я хотел бы чтобы получить только тег комментария в теге head. Мне интересно, что это невозможно с Селеном, но мне это кажется странным. Как я мог его получить?

ответ

2

Селен API не поддерживает комментарий узел. Однако вы можете Исли получить комментарий с этой частью JavaScript:

head = driver.find_element_by_css_selector("head") 
comment = get_element_comment(head) 
print(comment) 
def get_element_comment(element): 
    return element._parent.execute_script(""" 
     return Array.prototype.slice.call(arguments[0].childNodes) 
     .filter(function(e) { return e.nodeType === 8 }) 
     .map(function(e) { return e.nodeValue.trim() }) 
     .join('\n'); 
     """, element) 
+0

Я использовал BeautifulSoup решить это следующим образом:. 'Head_content_soup = BeautifulSoup (given_driver.find_element_by_xpath ('HTML/голова') get_attribute ('innerHTML'), 'html.parser') element_from_comment_tag = head_content_soup.findAll (текст = текст лямбда: isinstance (текст, комментарий)) 'Я просто хотел, чтобы мог быть способ сделать это, используя Selenium – TPPZ

0

Вы должны получить источник страницы и найти (разбор) требуемый комментарий оттуда. Что-то вроде этого:

driver.Navigate().GoToUrl("your url"); 
var src = driver.PageSource; 

Затем разобрать src

Смежные вопросы