Краткий ответ - это зависит. То, что вы видите в случае селена, - это HTML, в его форме после обработки из браузера. И их основная цель (кроме визуализации контента, для нас, простых людей :)), состоит в том, чтобы анализировать html, css и js и применять последние два к первому. Таким образом, получим результат, который с их (JS и CSS) набором правил применяется и эффективен (например, строчными буквами в вашем примере).
lxml или любые другие библиотеки синтаксического анализа XML этого не делают - они анализируют XML / HTML в изоляции , они не знают (или не заботятся) о модификации систем, таких как css (они заботятся о них) XSLT, но это совсем другая тема). Таким образом, результатом, который вы видите, является HTML, как он был написан, в его «ванильной» форме, любые правила CSS, на которые он ссылается, не применяются.
Я говорю «это зависит», потому что вы можете загрузить в lxml (или любой другой парсер) HTML-код, как браузер отображал / манипулировал им. Он доступен вам в атрибуте объекта self.driver.page_source
webdriver.
Содержит html в той же форме, которую вы видите в представлении «проверить элемент» браузера - с любыми манипуляциями со структурой (и содержимым) JS и CSS. Тем не менее, я не думаю, что именно этот случай - будет применен нижний регистр текста; Я думаю, что это на этапе рендеринга - например, в источнике значение «как есть», но браузер отображает его по-другому. К сожалению, я не перед компьютером, чтобы попробовать его сам.
Другой подход, который я бы порекомендовал вам, - это попробовать эту библиотеку - reports-html . Это вариант requests
, ориентированный на разбор HTML (кхм, просто посмотрите на его название: D). Он поддерживает javascript и, как «побочный эффект» CSS, парсинг необработанного HTML и может помочь вам.
Последнее достигается через response_object.html.render()