Python和Selenium - 如何在页面上找到所有元素ID?

jon*_*omo 11 python selenium

我知道我可以使用如下方法:

find_elements_by_tag_name()
find_elements_by_id()
find_elements_by_css_selector()
find_elements_by_xpath()
Run Code Online (Sandbox Code Playgroud)

但我想要做的只是获取页面中存在的所有元素ID的列表,可能还有它们出现的标记类型.

我怎么能做到这一点?

rus*_*spy 20

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://google.com')

ids = driver.find_elements_by_xpath('//*[@id]')
for ii in ids:
    #print ii.tag_name
    print ii.get_attribute('id')    # id name as string
Run Code Online (Sandbox Code Playgroud)


Arr*_*ran 18

以前不必这样做,但从逻辑上思考你可以使用XPath来做到这一点(可能是其他方式,XPath是我头脑中出现的第一件事).

使用find_elements_by_xpathXPath //*[@id](任何具有某种ID的元素).

然后,您可以遍历集合,并使用.tag_name每个元素的属性来查找它是什么类型的元素以及get_attribute("id")获取该元素ID 的方法/函数.

注意:这可能会很慢.毕竟,你要求提供大量信息.


小智 5

更新 Russian_spy 为新版本的 selenium 提供的优秀答案:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.google.com/')
ids = driver.find_elements(By.XPATH, '//*[@id]')
# to get names use '//*[@name]'

for ii in ids:
    print('Tag: ' + ii.tag_name)
    print('ID: ' + ii.get_attribute('id'))     # element id as string
    print('Name: ' + ii.get_attribute('name')) # element name as string
Run Code Online (Sandbox Code Playgroud)