如何使用click()删除Python中table/tbody中的每个元素?

2024-09-27 23:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个链接的表,这些链接具有相同的LinkText,因此当我使用该表时,总是选中第一个元素,因此不起作用:

driver.find_element_by_partial_link_text('Click here').click()

然后我使用I javascript函数使用其XPath获取table/tbody中的所有元素。如果我用变量rows打印每个元素,它看起来 就像这样<selenium.webdriver...element="...")>。你知道吗

在我的当前代码下:

import time
from selenium import webdriver

url="http://example_url.com"
driver_path="/driver/chromedriver"
driver = webdriver.Chrome(driver_path)
driver.get (url)

rows = driver.execute_script('''function getElementByXpath(path) {..};return getElementByXpath("//*[@id='someID']/table/tbody/").rows''')

>>> for r in rows:
...     print r # This prints the elements within 'rows'
...     #some other code
...
<selenium.webdriver.remote.webelement.WebElement (session="e819b7b267ba043d4233e118c5844e1e", element="0.7287146883212632-2")>
<selenium.webdriver.remote.webelement.WebElement (session="e819b7b267ba043d4233e118c5844e1e", element="0.7287146883212632-3")>
<selenium.webdriver.remote.webelement.WebElement (session="e819b7b267ba043d4233e118c5844e1e", element="0.7287146883212632-4")>
<selenium.webdriver.remote.webelement.WebElement (session="e819b7b267ba043d4233e118c5844e1e", element="0.7287146883212632-5")>

如何对找到的每个元素执行click()?你知道吗

比如:

对于行中的r: print r.click()#这不起作用

谢谢你的帮助。你知道吗


Tags: pathurl元素remote链接sessiondriverselenium
1条回答
网友
1楼 · 发布于 2024-09-27 23:24:53

必须使用索引到达行,因为每次单击表中的链接时,元素索引都会刷新。如果不使用索引并尝试使用循环单击链接,则可能会得到StaleElementException。你知道吗

下面是应该起作用的逻辑。你知道吗

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


url="http://example_url.com"
driver_path="/driver/chromedriver.exe"
driver = webdriver.Chrome(driver_path)
driver.get (url)

numberOfRows = len(driver.find_elements_by_xpath("//*[@id='someID']/table/tbody//tr"))

for iRow in range(numberOfRows):

    # wait until the row is present (you need this when you are coming back to the row containing table
    currentRow = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"(//*[@id='someID']/table/tbody//tr)[str(" + (iRow+1) + ")]")))
    # if you want to access the link in the row
    linkInCurrentRow = currentRow.find_elements_by_xpath(".//a[@attribute='attribute_value']")
    # click on the link or you can perform  desired operation 
    linkInCurrentRow.click()
    #write the logic below to navigate to the table containing page
    driver.back()

相关问题 更多 >

    热门问题