【问题标题】:find and click element which has a changing CSS selector (python)查找并单击具有不断变化的 CSS 选择器的元素(python)
【发布时间】:2019-09-20 20:20:26
【问题描述】:

我正在编写一个需要单击页面元素的脚本,但是,随着元素位置的变化,CSS 选择器每天都会发生变化。

今天叫:

PPTAmFCTable > tbody:nth-child(1) > tr:nth-child(11) > td:nth-child(3) > a:nth-child(1)

昨天是:

PPTAmFCTable > tbody:nth-child(1) > tr:nth-child(10) > td:nth-child(3) > a:nth-child(1)

明天可能是tr:nth-child(13) 左右。

我使用以下代码:

def click_element_bycss(browser,css,timeout):
    element_present = EC.presence_of_element_located((By.CSS_SELECTOR,css)) 
    WebDriverWait(browser, timeout).until(element_present)
    browser.find_element_by_css_selector(css).click()

然后:

click_element_bycss(browser,"#PPTAmFCTable > tbody:nth-child(1) > tr:nth-child(11) > td:nth-child(3) > a:nth-child(1)",4)

在不知道第二个 tr:nth-child() 中的数字的情况下,如何以单击正确元素的方式编写代码?

元素 HTML:

<a href="/FC1/ItemList;jsessionid=E6B3D538CD809FDDC3DE69EA160C956D?WorkPool=PickingNotYetPicked&amp;ExSDRange.RangeEndMillis=1556850660000&amp;ProcessPath=PPTAmFC&amp;ExSDRange.RangeStartMillis=1556850599999&amp;shipmentType=TRANSSHIPMENTS">261</a>

想到一个循环 对于范围内的 i (1,20):tr:nth-child(i) 但希望有更聪明的东西。

【问题讨论】:

  • 您需要使用相对定位器而不是绝对定位器。您可能需要通过文本查找元素。发布表格的 HTML。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

要查找并单击该元素,因为该元素是动态元素,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#PPTAmFCTable>tbody a[href^='/FC1/ItemList'][href$='TRANSSHIPMENTS']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='PPTAmFCTable' and starts-with(@href,'/FC1/ItemList')][contains(@href, 'TRANSSHIPMENTS')]")))
    
  • 注意:您必须添加以下导入:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多