python - 粘贴页面中的所有文本 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() 语句中的文本一样?
解决方案
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
在列表理解中)
推荐阅读
- javascript - 在不暴露访问密钥的情况下将文件上传到非公共 S3 存储桶的最佳方式
- linux - 我无法在我的 ubuntu 18.10 cosmic 系统上安装 erlang/Elixir
- python - 拟合给定函数
- c# - 从 Objective-C 到 C# 的转换
- open-policy-agent - OPA 单元测试失败,如何输出响应变量?
- android - 在flutter webview中加载本地pdf文件
- typescript - 没有文件更改时,Docker 容器中的 TypeScript 监视触发增量构建
- android - Atbeacon onNonBeaconLeScan 未调用 Android 10
- jenkins - Jenkins 中的 RBAC:如何仅为用户和组管理创建自定义权限
- php - 如何存储具有动态选项和多个级别的各种嵌套列表?