python - 查找并单击具有更改 CSS 选择器的元素 (python)

标签 python selenium xpath css-selectors webdriverwait

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

想到一个刚刚运行的循环 for i in range(1,20): 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/

相关文章:

python - Pandas 不会重命名多索引列名

Python无法获取文件的完整路径名

c# - 如何在 Nunit 中使用文件断言并检查文件是否存在

xpath - 在后面的代码中循环遍历XmlDataSource中的XML元素

PHP XML 库不返回 XPath 结果

python - GenericRelatedObjectManager 不是 JSON 可序列化的

python - 使用 selenium 登录 stackoverflow 可以正常工作,但使用 scrapy python 则不行。如何使用 headless 浏览登录?

selenium - 让 WebDriver 与 Firefox 一起使用

java - 如何在selenium xpath中的多个div之间获取子父Web元素组件?

python - 脚本的 bool 参数