首页 > 解决方案 > 粘贴页面中的所有文本 Selenium webdriver

问题描述

我正在使用带有 Selenium 驱动程序的 Python3。

from selenium.webdriver.chrome.options import Options
import sys

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=options)
try:
    driver.get("https://maclab.gameful.me/signin")
    driver.find_element_by_class_name("nsl-button-google").click()
    email = driver.find_element_by_id("identifierId")
    email.send_keys("338907@guhsd.net")
    driver.find_element_by_id("identifierNext").click()
    password = driver.find_element_by_name("password")
    password.send_keys("NotActualPassword")
    driver.find_element_by_id("passwordNext").click()
except:
    print("Something went wrong!", sys.exc_info())
finally:
    driver.close()
    sys.exit()

我的问题是,为了调试,如何打印 Selenium 看到的整个网页,就像 print() 语句中的文本一样?

标签: pythonseleniumselenium-webdriver

解决方案


Selenium 的方法是driver.page_source. 只打印那个。

如果要查找页面上的所有文本,则需要获取页面上所有元素的列表,然后.text在它们上调用方法。我认为您可能可以使用 XPath 查询来做到这一点。这是一个单线。

all_text = [element.text for element in driver.find_elements_by_xpath("*") if element.text]

解释:

all_text将是一个字符串列表。

driver.find_elements_by_xpath()返回与 XPath 查询匹配的所有元素的列表。

*是 XPath 中的通配符。您可能也可以这样做//*,其中//的意思是“当前节点中的所有匹配节点”,因为您的当前节点是根节点。

找到的某些元素将不包含任何文本(在这种情况下element.text将返回None),因此您需要将它们过滤掉(if element.text在列表理解中)


推荐阅读