Python 查找位置变化但文本不变的网页元素

Python 查找位置变化但文本不变的网页元素,python,selenium,xpath,Python,Selenium,Xpath,我试图在几个网页上找到一个元素。这些网页都在同一个网站上,但网站的结构有时每页都会发生变化 当我检查页面时,我看到以下完整的xpath: 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]

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

当我检查页面时,我看到以下完整的
xpath

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]

最后一个元素的文本始终包含字符串
Uptobox
即使结构不同,每次如何定位图元

当前代码(仅适用于上述两种代码,并具有不同的标准):

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

亲切问候,


Huib

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

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"))
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"))