簡體   English   中英

在 python 中使用 selenium webdriver 創建 Xpath

[英]Creating an Xpath with selenium webdriver in python

仍然無法使用 selenium 在 python 中創建 function 以單擊網頁上的按鈕。

只是我希望能夠在此頁面上按下一個按鈕(我假設 xpath 是右下角的行)

該解決方案需要能夠與不同尺寸進行交互,而我在創建 xpath 方面不夠熟練,我發現在線 selenium 4 的資源有限。

我試過了:

driver.find_element(By.XPATH, '//label[@value="US7.5W / US6Y"]').click()

driver.find_element(By.XPATH, '//label[@value="US7.5W / US6Y"]/html/body/div[2]/div[3]/div[1]/div/section/div/div[2]/div/div/div[1]/div/div/div[2]/form/div[1]/div[4]/div/div[2]/label').click()

任何人都可以幫助制作一個不會給我“沒有這樣的元素:無法找到元素”的錯誤。

我在 spyder 上運行的 python 3.9 中使用 selenium。

我會部分同意 Anand 上面的回答。 尋找任何阻礙實際元素或 window 的模態 window 是一個好主意。

但我認為我們應該盡量避免在 Xpath 中使用索引。 它不被認為是最佳實踐。 現在回答你的問題。

您可以嘗試使用如下簡單的 XPath。

//label[text()='US6.5W / US5Y']

Xpath 尺寸

上述運動鞋提到的所有尺碼都有一個相關的 id 標記。 您可以使用它而不是使用 xpath 的復雜方式。 您還可以使用 CSS 選擇器。 我用這個小代碼片點擊按鈕,它工作得很好

import time
from seleniumwire import webdriver
from webdriver_manager.chrome import ChromeDriverManager

from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

svc = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=svc)
driver.maximize_window()

def highlight(element):
    """Highlights a Selenium webdriver element"""
    driver = element._parent
    def apply_style(s):
        driver.execute_script("arguments[0].setAttribute('style', arguments[1])", element, s)
    orignal_style = element.get_attribute('style')
    apply_style("border: 4px solid red")
    if (element.get_attribute("style")!=None):
        time.sleep(5)
    apply_style(orignal_style)


driver.get("https://www.untiedau.com/products/nike-dunk-low-triple-pink-womens-gs")
time.sleep(5)
size_elem = driver.find_element(By.CSS_SELECTOR,"label[for='product-single__swatch-product-template-1-us7-5w-us6y']")

highlight(size_elem)

size_elem.click()
time.sleep(5)


driver.quit()

highlight方法只是將 4px 的紅色邊框應用於相關元素,以指示正在處理該元素。 代碼是用 Selenium 4 編寫的,所以你可能熟悉也可能不熟悉。 但是 Sel 3 或 4 的點擊代碼是相同的。

你的 xpath 太長了。 您應該嘗試使其更加相對(盡管這不一定是您遇到的問題,但是讓 xpath 盡可能相對以使其健壯是一個好習慣)。 一件事可能是模式 window 偶爾顯示在頁面上,禁用所有頁面操作,因為模式變得活躍。 所以,我使用了一個 try-except 塊,以防萬一出現模式,代碼將其關閉。 然后,我在 xpath 中使用了 class 和索引,第二個索引可能就是你要找的那個,所以我點擊了它。 如果您正在尋找其他尺寸的按鈕,請嘗試檢查它的索引並替換為相同的。 這對我有用。

driver.get('https://www.untiedau.com/products/nike-dunk-low-triple-pink-womens-gs')
time.sleep(5)
try:
    driver.find_element(By.XPATH, "(//*[contains(@class, 'needsclick')]//div[@role='dialog']//button)[1]").click()
except:
    print('modal not shown')
time.sleep(1)
sz = driver.find_element(By.XPATH, "(//div[@class='product-single__swatch__item'])[2]")
print(sz.text)
sz.click()

這是 output:

modal not shown
US6.5W / US5Y

Process finished with exit code 0

PS您可以用explicit waits替換time.sleep ,例如webdriverwait

暫無
暫無

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

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