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

时间:2018-01-08 05:17:33

标签: python regex selenium xpath screen-scraping

在XPath搜索中有几个与正则表达式的使用相关的类似问题 - 但是,有些问题对我来说不是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

如何在没有ID的情况下抓取所有网站元素,其XPath与Python + Selenium中的正则表达式匹配?

1 个答案:

答案 0 :(得分:1)

你不想要一个正则表达式,你想要谓词[position()<=6]