首页 > 解决方案 > 查找位置变化但文本不变的网页元素

问题描述

我正在尝试在几个网页上找到一个元素。这些网页都在同一个网站上,但网站的结构有时会每页发生变化。

当我检查页面时,我看到以下完整内容xpaths

1; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a[1]
2, /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]
3; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
4; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
5; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
6; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]
7; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]

1 , 2 , 3 , 4 , 5 , 6 , 7

最终元素的文本始终包含字符串Uptobox How do I locate the element 每次,即使结构不同。

当前代码(仅适用于上述几个并且具有不同的标准):

import selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(url)
links = driver.find_elements_by_xpath('//p[contains(., "Download")]//a')  # Need to adjust this to final uptobox-level

请让我知道我需要调整什么

亲切的问候,

惠布

标签: pythonseleniumxpath

解决方案


用于//a[.='Uptobox']获取Uptobox按钮,但您需要等到元素出现在 HTML 中。如果您单击使用element_to_be_clickable条件以等待元素可单击。

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(url)

uptobox = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[.='Uptobox']")))
uptobox.click()

更新,a.btn[rel*='nofollow']css 选择器将适用于所有页面:

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(url)

links = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.btn[rel*='nofollow']")))
for link in links:
    print(link.get_attribute("href"))

推荐阅读