【发布时间】:2017-11-15 10:26:32
【问题描述】:
我有一个带有链接的 html 文件,并且想区分链接是图像还是链接是文本。我在 Firefox 或 PhantomJS 浏览器中使用 Python 3 和 Selenium。我们的目标是有一个自动程序来遍历数百个 html 文件并找到带有图像的链接。
我做什么: 我首先只关注一个 html 文件。 在第一步中,我获取了 html 文件中所有图像的名称,我知道其中一个图像是链接,而其他图像不是。我将图像称为 IMAGENAME。
然后我尝试推导一个或多个图像是否是链接。我用:
driver.find_element_by_xpath('(//a[/img[contains(text(),"'+IMAGENAME[j]+'")]])')
or
driver.find_element_by_xpath('//a[/img[contains(@src,IMAGENAME[j])]]')
or
driver.find_element_by_xpath('//a/img[contains(@src,IMAGENAME[j])]')
with j = 0 (image is not a link) and j = 1 (image is a link).
在每种情况下,我都会收到相同的错误消息,它告诉我调用图像的方式一定是错误的:
NoSuchElementException: Message: no such element: Unable to locate element:...
当我离开 //a 部分并仅使用 //img 时,我会得到所有图像而没有错误消息。
在链接中调用图像时我做错了什么?有没有其他方法可以做到这一点?
【问题讨论】:
-
我不确定我能否正确理解您的目标,但
//a[img]将返回带有图像的链接和//a[not(img)]- 带有文本的链接。请注意,如果您想在XPath中使用j变量,您应该使用'xpath expression with %s variable' % j,而不是'xpath expression with j variable' -
如果我没记错的话,
\\a代表锚点,而您可能正在寻找href?
标签: python html selenium selenium-webdriver hyperlink