Selenium如何获取/提取Web元素的XPATH?Python

hrirmatl  于 2023-01-05  发布在  Python
关注(0)|答案(1)|浏览(204)

我知道如何使用XPATH查找Webelement,例如:

fruit = webdriver.find_element(By.XPATH, '/div/div[1]/div[2]').text

Output 
fruit = 'banana'

但我真正想做的是反其道而行之:

banana_path = webdriver."someway get the XPATH"(text = 'banana')

Output 
banana_path = '/div/div[1]/div[2]'

我想这么做是因为首先我会把所有的时间都取出来,这样当1等于10时(例如)我回到网站并抓取与之匹配的文本。不幸的是,有几十条信息(类的名称相同),根据需求不断增加或减少。这就是为什么我需要得到XPATH,因为有了它我就能直接找到我想找的东西。
例如,如果我得到了时间的XPATH:

time_path = '/div[1]/div/div/div/div/div[1]/div[1]/div[2]/div[3]'

我可以找到并擦除XPATH为近位置的文本

webdriver.find_element(By.XPATH, '/div[1]/div/div/div/div/div[1]/div[1]/span/div').text

我在堆栈溢出中找到了答案,但我使用的是Python而不是JavaScript。
Find an element by text and get xpath - selenium webdriver junit
我还发现这个答案教我如何使用urllib2和lxml来实现这一点,但是我正在进入一个站点,它对自动化的保护很强,我只能使用Selenium进入。
How to get an XPath from selenium webelement or from lxml?
我非常感谢您的帮助,因为这是我的自动化系统中最后一个缺失的部分

oxiaedzo

oxiaedzo1#

我知道你的问题了,我使用了selenium和lxml,正如你已经告诉我要使用这两个模块一样。我不知道我的方法是否能正常工作,因为我使用了你的问题How to get an XPath from selenium webelement or from lxml?的第二个链接中的lxml部分
这就是我方法

#First get website data using selenium 

from selenium import webdriver

url = ''

driver = webdriver.Chrome('path/to/driver')
driver.get(url)

data = driver.page_source()

#then get your xpath using lxml because you aleready have the data above

from lxml import etree

xpath = ''

tree = etree.parse(data)
element = tree.xpath(xpath)[0]
print(tree.getpath(element))

相关问题