如何使用 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 对我有用,关于属性,我现在更喜欢idname 来理解这一点。这就是为什么我给出了在运行时使用 python 获取id 的示例。 我很想知道下面提出的方法是否适合您。 @EttoreRizza 您的解决方案提供的xpath 是正确的。但是绝对不建议使用绝对xpath(需要使用相对xpath),因为如果父类发生任何更改,将来可能无法定位元素。 【参考方案1】:

xpath 是 web 元素的 xml 路径,它从 DOM 中的根节点 (<html>) 追踪特定元素的位置。

xpath 基本上有两种类型:absoluterelative。有一个名为 Firepath 的 firefox 浏览器插件可以帮助您创建 absolute xpaths。作为初学者,请使用带有 firebug 插件的 firepath。

相对 xpaths 是为动态 webelements 设计的,因为它们通过该元素相对于 node 中其他元素的相对位置来定位 webelements。它们的长度短而简洁。要了解创建相对 xpath 的艺术,请访问 w3schools。

【讨论】:

我不想手动查找 xpath。如果您遗漏了什么,请详细阅读说明,或者如果您需要更多详细信息,请告诉我。

以上是关于如何使用 python 为 Web 元素生成 Xpath(在我的脚本中运行时)?的主要内容,如果未能解决你的问题,请参考以下文章

1. 使用 Blazor 生成 Web 应用

python生成EXE 系统兼容性问题

如何使用 Selenium WebDriver 和 python 获取 Web 元素的颜色?

Python+Selenium笔记:元素定位

python selenium+ie 如何定位js生成的元素?

XP定位(APP元素定位)