Python 无法定位元素-多个元素似乎具有相似且最小的信息,我可以';两者都找不对
我试图从网站上的元素中提取一些属性,但找不到元素错误。除了属性之外,元素中没有太多要搜索的信息,我想要的属性每次都会更改 我最初将HTML转换为文本,然后正则表达式搜索文本以获得我想要的内容。现在我想让它更优雅一点 我试过:Python 无法定位元素-多个元素似乎具有相似且最小的信息,我可以';两者都找不对,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我试图从网站上的元素中提取一些属性,但找不到元素错误。除了属性之外,元素中没有太多要搜索的信息,我想要的属性每次都会更改 我最初将HTML转换为文本,然后正则表达式搜索文本以获得我想要的内容。现在我想让它更优雅一点 我试过: 浏览器。按名称(“状态”)查找元素 搜索文本属性(我知道这是错误的) browser.通过xpath(//label[@class='copySource'])查找元素 还有其他一些变化 浏览器。通过xpath(“//element[@attribute='Device
浏览器。按名称(“状态”)查找元素
- 搜索文本属性(我知道这是错误的)
browser.通过xpath(//label[@class='copySource'])查找元素
- 还有其他一些变化
浏览器。通过xpath(“//element[@attribute='Device Status:']”)查找元素
再加上一些其他的东西
使用此选项,使用查找所有元素
,返回一个空白列表,没有错误。
浏览器。通过xpath(//span[@class='class'])查找元素
我试图搜索的代码:
<td>
<label class="copySource">Device Registration Status:</label>
</td>
<tr>
<td>
<label class="copySource">Device Status:</label>
</td>
<td>
<span class="copySource copyEndLine">operational</span>
</td>
</tr>
试一试
browser.find_element_by_css_selector(".copyEndLine").text
您可以尝试在获取元素文本之前添加一个等待条件,例如“等待元素出现”,因为在与它交互时,它可能尚未加载。尝试使用
browser.find_element_by_css_selector(".copyEndLine").text
在获取元素文本之前,您可能会尝试添加一个等待条件,例如“等待元素出现”,因为当您与它交互时,它可能尚未加载。要提取文本可操作,您必须为位于()的元素的可见性诱导WebDriverWait
您可以使用以下任一选项:
css选择器
:
print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "tr td>span.copySource copyEndLine"))).get_attribute("innerHTML"))
xpath
:
print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//label[@class='copySource' and text()='Device Status:']//following::td[1]/span[@class='copySource copyEndLine']"))).get_attribute("innerHTML"))
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
要提取文本可操作您必须为位于()的元素的可见性诱导WebDriverWait,并且您可以使用以下任一项:
css选择器
:
print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "tr td>span.copySource copyEndLine"))).get_attribute("innerHTML"))
xpath
:
print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//label[@class='copySource' and text()='Device Status:']//following::td[1]/span[@class='copySource copyEndLine']"))).get_attribute("innerHTML"))
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
当存在具有类似名称/标签的组件时,通常会发生这种情况
您可以尝试:浏览器。通过xpath(“//span[@class='class']]”[0]
或任何其他索引查找元素;基于页面上类似组件的计数
另外,如果您可以共享您正在尝试的页面的url,这将非常有用。通常情况下,当存在具有类似名称/标记的组件时,会发生这种情况
您可以尝试:浏览器。通过xpath(“//span[@class='class']]”[0]
或任何其他索引查找元素;基于页面上类似组件的计数
另外,如果您可以共享您正在尝试的页面的url,这将非常有用。相关的XPath表达式如下所示:
//label[text()='Device Status:']/ancestor::tr/descendant::*[contains(@class,'EndLine')]
其中:
祖先::tr
-选择当前元素的相关表
后代::*[contains(@class,'EndLine')]
-通过XPath查找包含EndLine
的(子代或孙代)
演示:
相关的XPath表达式类似于:
//label[text()='Device Status:']/ancestor::tr/descendant::*[contains(@class,'EndLine')]
其中:
祖先::tr
-选择当前元素的相关表
后代::*[contains(@class,'EndLine')]
-通过XPath查找包含EndLine
的(子代或孙代)
演示:
您可以尝试以下方法:
browser.find_elements_by_cssselector(".copySource.copyEndLine")
如果图元位于框架内,则必须切换到框架,可以使用以下方法:
driver.switchTo().frame("FrameName");
您可以尝试以下方法:
browser.find_elements_by_cssselector(".copySource.copyEndLine")
如果图元位于框架内,则必须切换到框架,可以使用以下方法:
driver.switchTo().frame("FrameName");
没有运气。尝试了元素并得到了相同的结果,“没有这样的元素:无法定位元素:{”方法“:”css选择器“,”选择器“:”.copyEndLine“}”将其更改为元素,并获得一个空列表[],并尝试立即延长等待时间,但仍然没有发现您在iframe中发布的HTML代码有任何可能?不走运。尝试了元素并得到了相同的结果,“没有这样的元素:找不到元素:{“方法”:“css选择器”,“选择器”:“.copyEndLine”}”将其更改为元素并获得一个空列表[],并尝试立即延长等待时间,但仍然没有发现您在iframe中发布的HTML代码。检查iframe中是否有该表。通常,如果元素在主窗口中,它应该与td span.copyEndLine
css定位器一起工作。没有iFrame发现问题-需要深入指定更准确的xpath。这是否意味着从chrome复制xpath,然后粘贴到其他地方。我是个新手,我不知道我能做到这一点。解决了的!谢谢你的帮助,每一个你能做到的人。请核对我的答案。这可能会给你一些提示和帮助。检查Iframe中是否有该表。通常,如果元素在主窗口中,它应该与td span.copyEndLine
css定位器一起工作。没有iFrame发现问题-需要深入指定更准确的xpath。这是否意味着从chrome复制xpath,然后粘贴到其他地方。我是个新手,我不知道我能做到这一点。解决了的!谢谢你的帮助,每一个你能做到的人。请核对我的答案。这可能会给你一些提示和帮助。我恐怕无法保护内部公司网站我恐怕无法保护内部公司网站