在python selenium中与动态标签交互元素

Posted

技术标签:

【中文标题】在python selenium中与动态标签交互元素【英文标题】:interact elements with dynamic label in python selenium 【发布时间】:2021-09-15 03:34:37 【问题描述】:

这里是 Python 新手。全部1个月大。我试图抓取页面中的大多数元素,我能够处理它们并与它们交互。有两个元素具有我无法处理的动态标签。源页面如下所示

<span class="a-button-inner">
   <input class="a-button-input" type="submit" aria-labelledby="Ae8MCi-55">
   <span id="Ae8MCi-55" class="a-button-text" aria-hidden="true">Add Your Key</span>
</span>

每次刷新标签都是新的,所以我无法获得固定的 XPATH。有多个项目具有跨度类“a-button-inner”以及输入类“a-button-input”,并且在页面的其余部分还有其他提交按钮。唯一独特的是 Span 文本“添加您的密钥”。

感谢所有帮助以获取提交按钮元素并单击/提交它。

from selenium import webdriver
.
.
.
.
# objAddKey = driver.find_element_by_xpath('//*[@id="Ae8MCi-55"]/span/input') does not work as second round its a different XPath
objAddKey = driver.find_element_by_link_text('Add Your Key') # hoping this will get a sibling and then to get the parent and then look for all the children.  I don't even know if its possible in python.
objAddKey.click()'

试图通过跨度文本搜索搜索,并遇到了一些其他的东西, https://www.tutorialspoint.com/how-to-get-text-found-between-span-selenium

WebElement l = driver.findElement(By.xpath("//p/span"));
String s = l.getText();

但这也无济于事。

https://selenium-python.readthedocs.io/locating-elements.html 经历了这个,但也没有太大帮助。

感谢您的帮助和指点。

谢谢。

【问题讨论】:

【参考方案1】:

如果 Add Your Key 是唯一的,那么您可以使用以下 xpath:

//span[contains(text(), 'Add Your Key')]//preceding-sibling::input[@class='a-button-input']

甚至没有课:

//span[contains(text(), 'Add Your Key')]//preceding-sibling::input

并像这样使用它:

objAddKey = driver.find_element_by_xpath("//span[contains(text(), 'Add Your Key')]//preceding-sibling::input")
objAddKey.click()

我建议您明确等待以提高可靠性。

Selenium - Python - Explicit waits

【讨论】:

谢谢...。这就像一个魅力...。但是还有另一个问题...我将为此创建一个新线程...因为它可能是其他人也可能的东西脸。 在这个页面之后,我到达了另一个页面,它有一些有趣的东西,到目前为止让我很难过。这是那个问题,***.com/questions/68248694/…

以上是关于在python selenium中与动态标签交互元素的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中与另一个命令行程序交互

python2中与用户交互

python爬虫:使用Selenium模拟浏览器行为

从零开始学Python-使用Selenium抓取动态网页数据

python动态渲染页面爬取Selenium的具体使用

python动态渲染页面爬取Selenium的具体使用