簡體   English   中英

如何使用for循環點擊selenium中具有相同XPATH的多個元素?

[英]How to click through multiple elements with same XPATH in selenium using for loop?

我正在嘗試 web 抓取具有相同 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]"}

請幫忙。

您可以單擊所有元素保留在 for 循環中,並且必須使用元素而不是元素。

clicks = browser.find_elements(By.XPATH, "//div[@class= 'jumbo-tracker']")

for click in clicks:
   click = click.click()
   time.sleep(2)

使用字符串插值。 字符串插值是將變量值替換為字符串中的占位符的過程。 此示例(基於您的代碼)使用 f 字符串:

for i in range(1,length+1):
    browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{i}]").click()

范圍()

range() function 創建一個數字序列。

因此,在使用f 字符串xpath中傳遞變量時,您需要將number轉換為string以進行變量替換,您可以使用以下代碼行:

for i in range(1,length+1):
        browser.find_element(By.XPATH, f"(//div[@class= 'jumbo-tracker'])[{str(i)}]").click()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM