如何使用 python 为 Web 元素生成 Xpath(在我的脚本中运行时)?
Posted
技术标签:
【中文标题】如何使用 python 为 Web 元素生成 Xpath(在我的脚本中运行时)?【英文标题】:How do I generate Xpath (at run time in my script) for a web element using python? 【发布时间】:2017-07-17 18:26:43 【问题描述】:我正在尝试在文本文件中使用 python [数据抓取] 导出任何网页的页面对象。我还为元素提供了硬编码的 Selenium Web 驱动程序语法。
我可以通过使用id
属性来实现这一点。
例如,我发现所有具有id
属性和text
类型输入的网络元素:
from htmldom import htmldom
URL = "https://www.fundsindia.com/content/jsp/registration/login.jsp#SignIn.com/"
dom = htmldom.HtmlDom(URL)
dom = dom.createDom()
#retrieves all the elements with ids and "type=text"
p_id = dom.find("[id]")
for id in p_id.filter("[type=text]"):
print (("\t" + "WebElement" + " %s " + "= " + 'driver.findElement(By.id("%s"))')%(id.attr("id"),id.attr("id")) + "\n")
这将给出如下输出:
WebElement userName = driver.findElement(By.id("userName"))
WebElement emailId = driver.findElement(By.id("emailId"))
WebElement mobileNumber = driver.findElement(By.id("mobileNumber"))
WebElement userMailId = driver.findElement(By.id("userMailId"))
以类似的方式,我想使用xpath
代替id
。例如
WebElement userMailId = driver.findElement(By.xpath("x_path"))
有人能帮忙找出x_path
吗?我花了几个小时仍然没有成功,我想知道这在这个世界上是否可能?
请提出建议。
【问题讨论】:
@jainish 我知道 xpath 是什么以及如何制作它。但是我想在运行时使用 python 生成 xpath。这意味着自动。请参考我给出的例子。XPath
不是特定值。可能有几十种选择。你想使用什么样的XPath
?绝对XPath
,按一个精确属性、所有属性、文本、绑定到父节点搜索...?
@Andersson 感谢您提出这个问题,我在等这个。相对xpath
对我有用,关于属性,我现在更喜欢id
或name
来理解这一点。这就是为什么我给出了在运行时使用 python 获取id
的示例。
我很想知道下面提出的方法是否适合您。
@EttoreRizza 您的解决方案提供的xpath
是正确的。但是绝对不建议使用绝对xpath
(需要使用相对xpath
),因为如果父类发生任何更改,将来可能无法定位元素。
【参考方案1】:
xpath 是 web 元素的 xml 路径,它从 DOM 中的根节点 (<html>
) 追踪特定元素的位置。
xpath 基本上有两种类型:absolute 和 relative。有一个名为 Firepath 的 firefox 浏览器插件可以帮助您创建 absolute xpaths。作为初学者,请使用带有 firebug 插件的 firepath。
相对 xpaths 是为动态 webelements 设计的,因为它们通过该元素相对于 node 中其他元素的相对位置来定位 webelements。它们的长度短而简洁。要了解创建相对 xpath 的艺术,请访问 w3schools。
【讨论】:
我不想手动查找 xpath。如果您遗漏了什么,请详细阅读说明,或者如果您需要更多详细信息,请告诉我。以上是关于如何使用 python 为 Web 元素生成 Xpath(在我的脚本中运行时)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?