如何使用 for 循环在 selenium 中单击具有相同 XPATH 的多个元素?
How to click through multiple elements with same XPATH in selenium using for loop?
我正在尝试通过网络抓取具有相同 class 名称的不同元素。以下语句运行良好。
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[1]").click()
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[2]").click()
...
等等。
现在,如果我把它放在一个循环中,它就不起作用了。貌似,不认识 (//div[@class= 'jumbo-tracker'])[i]
代码如下:
for i in range(1,length+1):
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[i]").click()
sleep(5)
browser.find_element(By.XPATH, "//div[@class='sc-1y3q50z-3 eiMLBn']").click()
sleep(5)
sno.append(restaurant)
restaurant_name= browser.find_element(By.XPATH,"//h1[contains(@class, 'sc-7kepeu-0 sc-kafWEX kTxZkY')]").text
name.append(restaurant_name)
browser.back()
browser.back()
sleep(5)
例外情况:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"(//div[@class= 'jumbo-tracker'])[i]"}
拜托,帮忙。
使用字符串插值。字符串插值是将变量值替换为字符串中的占位符的过程。此示例(基于您的代码)使用 f-string:
for i in range(1,length+1):
browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{i}]").click()
你可以点击所有元素保持在for循环中,你必须使用元素而不是元素。
clicks = browser.find_elements(By.XPATH, "//div[@class= 'jumbo-tracker']")
for click in clicks:
click = click.click()
time.sleep(2)
范围()
range()
函数创建一个数字序列。
因此,在 using f-strings 中传递变量时,您需要将 number
转换为 string
用于变量替换,您可以使用以下代码行:
for i in range(1,length+1):
browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{str(i)}]").click()
我正在尝试通过网络抓取具有相同 class 名称的不同元素。以下语句运行良好。
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[1]").click()
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[2]").click()
... 等等。
现在,如果我把它放在一个循环中,它就不起作用了。貌似,不认识 (//div[@class= 'jumbo-tracker'])[i]
代码如下:
for i in range(1,length+1):
browser.find_element(By.XPATH, "(//div[@class= 'jumbo-tracker'])[i]").click()
sleep(5)
browser.find_element(By.XPATH, "//div[@class='sc-1y3q50z-3 eiMLBn']").click()
sleep(5)
sno.append(restaurant)
restaurant_name= browser.find_element(By.XPATH,"//h1[contains(@class, 'sc-7kepeu-0 sc-kafWEX kTxZkY')]").text
name.append(restaurant_name)
browser.back()
browser.back()
sleep(5)
例外情况:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"(//div[@class= 'jumbo-tracker'])[i]"}
拜托,帮忙。
使用字符串插值。字符串插值是将变量值替换为字符串中的占位符的过程。此示例(基于您的代码)使用 f-string:
for i in range(1,length+1):
browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{i}]").click()
你可以点击所有元素保持在for循环中,你必须使用元素而不是元素。
clicks = browser.find_elements(By.XPATH, "//div[@class= 'jumbo-tracker']")
for click in clicks:
click = click.click()
time.sleep(2)
范围()
range()
函数创建一个数字序列。
因此,在 number
转换为 string
用于变量替换,您可以使用以下代码行:
for i in range(1,length+1):
browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{str(i)}]").click()