gpt4 book ai didi

python - 查找并单击具有不断变化的 CSS 选择器的元素(python)

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:03 24 4
gpt4 key购买 nike

我正在编写一个需要点击页面元素的脚本,但是,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>

想到一个刚刚运行的循环对于范围 (1,20) 中的 i:tr:nth-child(i)但希望有更智能的东西。

最佳答案

要查找并单击该元素,因为该元素是动态元素,您需要为 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

关于python - 查找并单击具有不断变化的 CSS 选择器的元素(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55950278/

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