当前位置: 首页 > 知识库问答 >
问题:

在selenium python中使用xpath

宗政霄
2023-03-14

我在Firefox中使用Firebug为没有分配ID的链接获取xpath。该链接是一个带有图像作为实际按钮的javascript链接。我希望能够单击此链接,但它不起作用。

实际的xpath是'/html/body/div[2]/div/div/div[3]/div/div/table/tbody/tr[1]/td[2]/form/table/tbody/tr[1]/td/div[1]/div/table/thead/tr[2]/th[1]/a/img'

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()

URL = 'http://example.com'

driver.set_window_size(1024, 768)
driver.get(url)

link = driver.find_element_by_xpath(//*[@id="//html/body/div[2]/div/div/div[3]/div/div/‌​table/tbody/tr[1]/td[2]/form/table/tbody/tr[1]/td/div[1]/div/table/thead/tr[2]/th‌​[1]/a/img"])
for link in links:
 link.click()

我收到以下错误:<代码>无效或未生成WebElement。出现以下错误:\nInvalidSelectorError:由于以下错误,无法找到xpath表达式为//*[@id=/html/body/div[2]/div/div/div[3]/div/div/table/tbody/tr[1]/td[2]/form/table/tbody/tr[1]/td/div[1]/div/table/thead/tr[2]/th[1]/a/img的元素:\n[异常…”表达式不是合法表达式。“代码:“12”nsresult:“0x805b0033(SyntaxError)”位置:

<a onclick="if(typeof functionx == 'function'){functionx(document.getElement…,'liststuff','');}return false" href="#">

   <img style="border: 0px;" onmouseover="this.src='/add-hover.gif';" onmouseout="this.src='/add.gif';" alt="Add" src="/icon-add.gif"></img>

</a>

共有1个答案

谭正谊
2023-03-14

依赖元素的父元素和属性,而不是元素的绝对路径:

link = driver.find_element_by_xpath('//a[@onclick and @href = "#" and img/@alt = "Add"]')
 类似资料:
  • 问题内容: 我添加到我的环境变量 我在这里下载的http://selenium- release.storage.googleapis.com/index.html?path=2.46/ Python脚本: 输出: 我期望jar定义了所有内容,为什么找不到驱动程序类? 问题答案: 根据您的问题,您似乎正在使用适用于Opera 12及更高版本的旧驱动程序。假设您尝试使用最新版本的Opera,则需要使

  • 问题内容: 我想点击google结果上的第一个结果。这是我输入从csv文件读取的chennai craiglist的代码。因此,我肯定有机结果中的第一个链接将是chennai.craiglist.org。但是我很安静,不确定如何执行此操作。 我想知道这行之后会发生什么? 更新 现在我给像 我不确定它是否会起作用。 问题答案: 在你选择的是“OK”,但可能不是最好的。

  • 问题内容: 我有一个只具有href值作为属性的锚标记的href值。现在,我想在页面中找到与我的href值具有相同值的元素,然后单击它。我找不到使用标准selenium方法执行此操作的任何方法。如何执行此操作?基本上,这些是我找到的功能,但似乎无法使用其中任何一个: 问题答案: 您可以使用find_element_by_xpath功能。

  • 问题内容: 第3、16、17、18和19行用*突出显示的含义是什么。有人可以解释他们的工作吗?我是python和编程新手 问题答案: 这段代码中只有三行用*突出显示,但这是它们的意思: 第一行: 这是在声明 后面 的函数( test_Iframe 和 tearDown )的 类* 。在面向对象的编程中,使用一个类来创建“对象” 。可以将 类 视为数据/过程的抽象,而 对象 是类的特定实例。 ***

  • 问题内容: 尝试使用selenium-webdriver python向下滚动到页面底部,以便加载更多产品。 该网页已加载,但没有变化。 我想念什么吗? 问题答案: 您可以尝试以下move_up和move_down函数:

  • 问题内容: 嗨,如何在Selenium(Python 3)中禁用GeckoDriver的日志文件? 如果不可能,如何将其重新定位到Temp文件? 问题答案: 要重新 放置GeckoDriver 日志,可以在项目空间中创建一个目录,例如 Log, 并且可以使用参数 log_path 将 GeckoDriver 日志存储在文件中,如下所示:

  • 问题内容: 如何为Firefox设置Selenium Python环境?我正在使用Firefox 50,Selenium 3,Python 3.5,我尝试了许多二进制操作,并在环境路径中复制了geckodriver等。 问题答案: 据我了解,您想使用selenium库在python中进行开发并与Firefox webdriver一起工作。 安装python(python3已经包含pip) 安装硒(

  • 问题内容: 喂, 我的xpath在firePath中进行了验证,但是当我尝试发送_key时出现错误。 AttributeError:“列表”对象没有属性“ send_keys” 有人可以折腾我吗? 问题答案: 您将获得一个webElement 列表 ,该 列表当然不是单个元素,也没有方法。使用代替。请参阅此 api文档。