我正在尝试通过Python Selenium中的索引号查找元素。元素具有以下xpath;
/html/body/div[4]/div[1]/div[3]/div/div[2]/div/div/div/div/div/div/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div/div[3]/div[1]/div/div/div[9]
我还包括了我想要的元素的以下图像。
我能够通过普通的xpath找到该元素,但是我想循环执行10,000次。
我想知道是否存在一种使用其索引号查找元素的方法。这是我拥有的代码,仅适用于索引值5,但无法正常工作。
Fund_click.append (driver.find_element_by_xpath("//div[@id='app']/div[1]/div[3]/div/div[2]/div/div/div/div/div/div/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div/div[3]/div[1]/div/div/[div/@index='5']"))
答案 0 :(得分:0)
根据您的快照,您可以尝试通过这种方式查看您是否有所不同。我已经考虑将claas&Index属性。
for i in range(1,10000):
print(driver.find_element_by_xpath("//div[@class='tg-row tg-level-0 tg-even tg-focused']" and "//div[@index='" + str(i) + "']"))
如果要使用索引号,请尝试下面的代码。但是我不确定您只能使用索引来识别元素,因此最好尝试上面的第一个选项。
for i in range(1,10000):
print(driver.find_element_by_xpath("//div[@index='" + str(i) + "']"))
答案 1 :(得分:0)
尝试下面的xpath进行确认,是否可以找到所有元素?如果页面已完全加载,则应该看到所有匹配项(手动检查)。
from flask import Flask
def create_app():
app = Flask(__name__)
def run_on_start(*args, **argv):
print "function before start"
run_on_start()
return app
app = create_app()
@app.route("/")
def hello():
return "Hello World!"
您可以在上述xpath定位器的帮助下,使用//div[@id='app']//div[contains(@class, 'tg-row')]
方法来获取和存储所有元素,从而避免每次都遍历元素索引。尝试以下代码:
driver.find_elements_by_xpath()
如果元素存在并且获取# Fetching and storing all the matches
elements = driver.find_elements_by_xpath("//div[@id='app']//div[contains(@class, 'tg-row')]");
for element in elements:
# printing the index numbers to confirm it has fetched or not?
print(element.get_attribute('index'))
或检查NoSuchElementException
,请尝试在获取元素之前给予一些延迟。
如果所有元素都不可见,则您需要执行一些滚动操作。
如果上述方法不起作用,则可以尝试使用以下xpath基于索引/匹配索引号来标识该元素,然后可以继续进行操作。
(// div [@ id ='app'] // div [包含(@class,'tg-row')])[匹配索引]
或
// div [@ id ='app'] // div [包含(@class,'tg-row')和@ index ='provide 索引号在这里']
或
// div [包含(@class,'tg-row')和@ index ='提供索引号 这里']
或
// div [@ index ='在此处提供索引号']
或
(// div [包含(@class,'tg-row')]))[提供匹配的索引号 这里]
希望对您有帮助...