【问题标题】:How can I print only displayed/visible/(shown on the screen) text contents of any website using python selenium如何使用 python selenium 仅打印任何网站的显示/可见/(显示在屏幕上)文本内容
【发布时间】:2019-09-23 17:45:21
【问题描述】:

我只想打印/获取来自任何网站的可见文本内容{当前用户正在看到的内容}。

我尝试使用多种方法,但我从页面中获取了所有文本,但不是预期的文本。

driver = webdriver.Chrome(chrome_options=options) #'CustomerProject-createCustomerProject&/Create'
url = "https://techcrunch.com/"
driver.get(url)
element = driver.find_element_by_xpath(r"//body")
driver.execute_script("return arguments[0].innerText", element) 

有没有办法只获取可见文本。

注意:如果解决方案是纯 javascript,非常欢迎。

【问题讨论】:

标签: javascript python selenium xpath


【解决方案1】:

获取body 元素并使用.text 方法获取该元素的文本。

试试这个:

driver.get("https://techcrunch.com/")
element = driver.find_element_by_tag_name("body")
print(element.text)

如果您猜测(opens in a new window) 文本在文档中不可见但出现在结果中,那是因为它出现在页面上。如果您尝试Ctrl + A 并复制文本,您将获得相同的结果。您甚至可以使用Ctrl+F 搜索页面中的文本。

您看不到文本的原因是它是使用webkit-clip-path 剪辑的。

clip-path CSS 属性创建一个剪辑区域,用于设置元素的哪一部分应该被显示。显示区域内的部分,而隐藏区域外的部分。

【讨论】:

  • 感谢您的回复。尽管如此,这将给出整个文本内容,我只想要用户可见的内容。有内容,滚动后可见,也是用这种方法打印的,我不打算这样做
  • 查找哪些 CSS 类可见,哪些不可见。根据该信息过滤内容。
  • element.text 正在获取页面的可见文本。您认为哪一部分显示了 javascript 不会显示的额外内容?
  • 我在这个页面上运行了代码,我得到了从顶部“堆栈溢出”到底部“网站设计/徽标..”的文本,这里我们只能在向下滚动后看到页脚,这不是当前可见但仍在打印,我不想要。
  • 您提到的这两个文本在页面和正文标记内都是可见的。这意味着代码正在做它应该做的事情。现在,如果您尝试获取文本,而不是从整个页面中获取文本,而此时只有部分显示在屏幕上而不滚动,那么这是一个完全不同的问题。但是对于浏览器来说,整个可滚动页面都是可见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多