gpt4 book ai didi

python - 如何对 Selenium Python 中的 table/tbody 中找到的每个元素执行 click() ?

转载 作者:行者123 更新时间:2023-12-01 07:33:14 27 4
gpt4 key购买 nike

我有一个表,其中有几个具有相同 LinkText 的链接,所以当我使用它时,总是选择第一个元素,所以不起作用:

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

然后我使用 javascript 函数来获取 table/tbody 中的所有元素使用它的 XPath。它有效,如果我使用变量 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() # 这不起作用

感谢您的帮助。

最佳答案

您必须使用索引访问该行,因为每次单击表中的链接时都会刷新元素索引。如果您不使用索引并尝试使用循环单击链接,您最终可能会收到 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()

关于python - 如何对 Selenium Python 中的 table/tbody 中找到的每个元素执行 click() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57119258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com