selenium webbrowser:如何通过迭代提取多个属性名称?

selenium webbrowser: How to extract several attribute names by iteration?

我正在尝试从火车搜索平台抓取数据(出发时间、承运人、价格等)(https://www.thetrainline.com),但我在提取名称时遇到了问题的属性。所有连接的 HTML 如下所示,我想获得所有运营商的列表,即。我想从属性“data-test-carrier-neme”中获取相应的运营商,这里是“trenitalia”。

div class="_1moixrt _dtnn7w" tabindex="0"span data-test-carrier-name="trenitalia"

例如,有时我只是通过迭代收集属性文本(参见语法) 现在对于承运人,我没有成功收集属性名称。我只获得了第一个 iteration/first 连接的运营商名称,但没有获得后续连接的运营商名称。

dep_times = driver.find_elements_by_xpath('//div[@class="_1rxwtew "]')
dep_times_list = [x.text for x in dep_times]

#First Approach: 我得到了属性名称,但只针对第一个连接

carrier1 = driver.find_elements_by_xpath('(//div[@class="_1moixrt _dtnn7w"])[1]/span[1]')

carrier1_list = [x.get_attribute("data-test-carrier-name") for x in carrier1]

Output: ['trenitalia']

#第二种方法: 我访问所有连接的属性但没有获取属性的名称:

carrier1 = driver.find_elements_by_xpath('(//div[@class="_1moixrt _dtnn7w"])[1]/span[1]')

carrier1_list = [x.get_attribute("data-test-carrier-name") for x in carrier1]

Output: [None, None, None, None, None, None]

有人可以调整我的代码来解决我的问题吗?非常感谢您的帮助!!

第一种方法中使用的 xpath 仅返回一个元素,这就是结果仅显示第一个运营商名称的原因。试试这个 - 我刚刚从你的 xpath 中删除了索引 [1]。

carrier1 = driver.find_elements_by_xpath('(//div[@class="_1moixrt _dtnn7w"])/span[1]')

carrier1_list = [x.get_attribute("data-test-carrier-name") for x in carrier1]