在 python selenium 中与动态标签交互元素
interact elements with dynamic label in python selenium
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。有多个带有 span class "a-button-inner" 和 input class "a-button-input" 的项目,页面的其余部分还有其他提交按钮。唯一独特的是 Span 文本“添加您的密钥”。
感谢所有帮助获取提交按钮元素和 click/submit 它的帮助。
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
经历了这个,但也没有太大帮助。
感谢您的帮助和指点。
谢谢。
如果 Add Your Key
是唯一的,那么您可以使用下面的 xpath :
//span[contains(text(), 'Add Your Key')]//preceding-sibling::input[@class='a-button-input']
甚至没有 class :
//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()
我建议您明确等待以获得更高的可靠性。
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。有多个带有 span class "a-button-inner" 和 input class "a-button-input" 的项目,页面的其余部分还有其他提交按钮。唯一独特的是 Span 文本“添加您的密钥”。
感谢所有帮助获取提交按钮元素和 click/submit 它的帮助。
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 经历了这个,但也没有太大帮助。
感谢您的帮助和指点。
谢谢。
如果 Add Your Key
是唯一的,那么您可以使用下面的 xpath :
//span[contains(text(), 'Add Your Key')]//preceding-sibling::input[@class='a-button-input']
甚至没有 class :
//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()
我建议您明确等待以获得更高的可靠性。