代码之家  ›  专栏  ›  技术社区  ›  sudonym

如何使用仅XPath正则表达式模式刮取无ID的网站元素

  •  0
  • sudonym  · 技术社区  · 7 年前

    在XPath搜索中使用regex有几个类似的问题,但有些问题不是很好 illuminating 对我来说,而其他人 failed 针对我的具体问题。因此,对于可能遇到相同问题的未来用户,我将发布以下问题:

    使用Python/Selenium中的一个调用,我希望能够一次刮取下面的所有元素(无需代码格式化即可获得可读性):

    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**1**]/div/div[2]/div[1]
    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**2**]/div/div[2]/div[1]
    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**3**]/div/div[2]/div[1]
    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**4**]/div/div[2]/div[1]
    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**5**]/div/div[2]/div[1]
    /html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[**6**]/div/div[2]/div[1]
    

    请注意,匹配元素的数量在目标网站之间是可变的(可以超过6个,但至少有一个),并且关联的元素 没有 指定的特定ID(其中 不包括 许多的 solutions 根据我的理解,在StackOverflow的其他地方进行了解释)。

    我想要的是:

    website = driver.get(URL)
    html = WebDriverWait(driver, 1).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[[0-9]{1}]/div/div[2]/div[1]", regex = True)))
    

    不起作用的是:

    website = driver.get(URL)
    html = WebDriverWait(driver, 1).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[6]/div/div[1]/div/div[3]/div[2]/div[2]/div[matchers['[0-9]{1}']]/div/div[2]/div[1]")))
    TimeoutException: Message: 
    Screenshot: available via screen
    

    如何在Python+Selenium中清除所有没有ID且其XPath与正则表达式模式匹配的网站元素?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Michael Kay    7 年前

    你不需要正则表达式,你需要谓词 [position()<=6] .