对于想了解如何确定是否为Selenium+Python加载了某些HTML元素?的读者,本文将是一篇不可错过的文章,我们将详细介绍selenium判断,并且为您提供关于javascript–如何确定HT
对于想了解如何确定是否为Selenium + Python加载了某些HTML元素?的读者,本文将是一篇不可错过的文章,我们将详细介绍selenium判断,并且为您提供关于javascript – 如何确定HTML元素是否具有伪元素?、Python + Selenium:如何在while循环中找到新出现的元素?、Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素、python selenium 判断元素是否可见的有价值信息。
本文目录一览:- 如何确定是否为Selenium + Python加载了某些HTML元素?(selenium判断)
- javascript – 如何确定HTML元素是否具有伪元素?
- Python + Selenium:如何在while循环中找到新出现的元素?
- Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素
- python selenium 判断元素是否可见
如何确定是否为Selenium + Python加载了某些HTML元素?(selenium判断)
从这个链接,我假设首先应该将DOM整体加载到RAM中。
OM如何工作/如何加载?(以HTML格式)
但是后来我在Selenium中测试了超时异常。似乎甚至引发了超时异常,已经可以找到一些元素,因此它不是一个空对象。
但是我想知道,如何确保某些元素已经加载?例如HTML示例,如何确定所有<th>
元素都已加载?鉴于我实际上并不知道<th>
元素的数量。
代码试用:
driver = webdriver.Chrome()driver.set_page_load_timeout(10)try: driver.get(url) print(''load success!'')except TimeoutException: print(self.page_source)
HTML示例:
<table width="910" border="0" cellpadding="3" cellspacing="0" id="fth1_"> <thead> <tr align="center"> <th id="f13"><a href="t/?i=614&o=1">Symbol</a></th> <th id="f13"><a href="t/?i=614&o=2">Name</a></th> </tr> </thead></table>
答案1
小编典典根据你的代码试验使用的是 ChromeDriver 和 Chrome的浏览器 ,以 自动化
的步骤。配置完后,由于在通过配置的时间段内页面未完全加载,因此引发set_page_load_timeout(10)
了 超时
异常set_page_load_timeout()
。但是,当您调用print(self.page_source)
了部分呈现的HTMLDOM 中呈现的元素时,将对其进行检索。
现在关于您的单个查询:
How can I make sure some elements are already loaded?
:理想的 测试用例 将具有确定的步骤,例如,验证元素的存在,验证元素的可见性或验证元素的交互性(单击时)。从这个角度来看,验证 已经加载 的 元素 可能不包含所需的元素。因此,您需要将 搜索标准 范围缩小到某些确定的 范围, 而不是使用如此 广泛 的 搜索条件 ,例如- 页面标题
- 页面标题
- 警报的存在
- 元素的属性
- 元素的存在
- 一组元素的存在
- 元素的可见性
- 一组元素的可见性
- 元素的可点击性
- StalenessOf元素
- FrameToBeAvailableAndSwitchToIt
实现这些缩小 搜索条件 可以节省大量的_执行时间_的帮助下WebDriverWait
与inconjunctionexpected_conditions
]。
How can I make sure all elements are loaded?
:同样,我们的测试应仅集中在我们需要与之交互的元素上,而忽略验证与我们无关的其他元素的状态/条件。现在,根据上述两点,这是3种最常用的用 例 :
presence_of_element_located
:期望检查页面的DOM中是否存在元素。这并不一定意味着该元素是可见的。visibility_of_element_located
:期望检查元素是否存在于页面的DOM上并且可见。可见性意味着不仅显示元,而且其高度和宽度都大于0。element_to_be_clickable
:检查元素的期望是可见的并且已启用,因此您可以单击它。根据您提到的用 例 ,您可以使DOM树 中所有元素的 列表
<th>
可见,同时等待诱导 WebDriverWait 的可配置时间,如下所示:from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
headerList = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, “//table[@class=’fth1_’ and @id=’fth1_’]/thead/tr//th”)))
注意 :此插图中使用的 xpath 是仅用于演示目的的样本 xpath 。
javascript – 如何确定HTML元素是否具有伪元素?
有没有办法确定给定的HTML元素是否在不调用的情况下应用了伪元素(:: before / :: after)
window.getComputedStyle(element,":before/:after");
编辑:答案是否定的
getComputedStyle的问题在于性能.我需要验证页面上的每个元素是否有伪元素 – 这就是性能非常关键的原因.
我试图从document.styleSheets访问cssRules以找到最后使用:: before或:: after的选择器,删除它并找到与其余选择器匹配的元素,但是这个解决方案有它自己的问题:
>无法访问来自不同域的styleSheets
>可能有成千上万的cssRules要检查(再次表现)
我还尝试比较元素的大小和偏移量有无元素,但没有任何效果.即使没有准确的方法,我也很乐意找到一种方法来削减一定数量的元素,至少检查30%.
当我确定该元素有一个伪元素时,我终于可以调用getComputedStyle来研究伪元素样式并进行更改.这部分完美有效.
编辑:我无法控制源页面.页面样式可以从不同的域动态上传.假设我的代码是内容脚本或库,例如必须将所有伪元素前景更改为基于该伪元素的其他CSS属性计算的某些颜色.
因此,主要问题是更改基于其他CSS属性,并且您无法在不实际检索伪元素的计算样式和计算更改的情况下为所有伪元素设置相同的样式.
例如,您有youtube.com页面,您需要找到所有伪元素和
>如果此伪元素具有背景图像,则缩放元素
>如果此伪元素只有文本,则将其颜色更改为红色
>等……
这种遍历元素的方法:
var allElements = document.getElementsByTagName("*");
for (var i = allElements.length; i--;) {
//var usedStyle = window.getComputedStyle(allElements[i],":before/:after");
...
}
每1ms大约有数千个元素.
并且getComputedStyle的调用不应该太慢,因为它获取在调用时已经计算的数据(在渲染文档上).
所以这一切都应该足够快.是的,它原则上是O(N)任务但是运行一次,对吧?
Python + Selenium:如何在while循环中找到新出现的元素?
对于您不拥有的网站,不要依赖类。 这是您的问题之一,否则将在将来。 依靠可以长时间保持静态的东西,例如在按钮上写的文字。 如果您确定下一个按钮将具有相同的类名,则只需存储找到的第一个按钮的类名以搜索其文本,然后在循环中进一步使用该类名即可。
确保这些按钮也没有加载到iframe中,这可能是个问题。 无论如何,请发布页面源代码的两个图像。第一次单击之前一个,在单击第一个按钮之后第二个。
谢谢。
Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素
如何解决Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素?
大家好!今天我正在使用 Python 3 和 Selenium Web 驱动程序。我在按元素查找时遇到问题。这是 HTML:
<a _ngcontent-pxc-c302=""href="/person/20d4a795d3fb43bdbee7e480df27b05b">michele regina</a>
目标是点击出现在列出的列中的名字。
名称随着每次页面刷新而变化。这带来了两个问题,即链接文本是名称并且它会发生变化,并且除了显示 /person/
我尝试了以下方法:
driver.find_element_by_css_selector("a.name ng-star-inserted").click()
driver.find_element_by_class_name("name ng-star-inserted").click()
这导致元素不是可点击错误。 我还通过复制和粘贴从 Google Inspector 复制的整个 XPath 来尝试 xpath...lol
driver.find_element_by_xpath(''/html/body/app-root/app-container/div/div/tc-app-view/div/div/div/ng-component/mat-sidenav-container/mat-sidenav-content/div/div[2]/tc-person-table-container/tc-collapse-expand[1]/section/tc-person-table/table/tbody/tr[1]/td[2]/tc-person-table-cell/a'').click()
它有时会起作用,这很奇怪,但我确信必须有更好的方法。非常感谢您!任何帮助表示赞赏!另外,我对 Python 非常陌生,我知道零 HTML,而且我也是堆栈的新手!谢谢!
解决方法
从给定的完整 xpath 中,您要查找的 a
标记位于 table
,section
,div
中。在这些标签中查找 ID 并跟踪 a
。
python selenium 判断元素是否可见
1 #在元素定位二次封装的基础上,封装判断元素是否可见,找到元素时返回True,找不到元素的时候抛出异常,返回False
2 def isElementPresent(self,locate_type,value):
3 try:
4 self.findElement(locate_type,value)
5 return True
6 except NoSuchElementException as e:
7 # print(e)
8 return False
关于如何确定是否为Selenium + Python加载了某些HTML元素?和selenium判断的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于javascript – 如何确定HTML元素是否具有伪元素?、Python + Selenium:如何在while循环中找到新出现的元素?、Python Selenium 使用小 HTML 查找具有动态 URL 和名称的元素、python selenium 判断元素是否可见的相关知识,请在本站寻找。
本文标签: