Python 使用xpath selenium查找元素

Python 使用xpath selenium查找元素,python,python-3.x,selenium,xpath,Python,Python 3.x,Selenium,Xpath,下面我将学习如何构建一个webscraper来获取工作列表。现在我正试图跟随另一个网站。我遇到了一个问题,我不知道如何提取各个工作列表的链接 当我检查页面时,我找到了需要的元素 当我复制xpath并在代码中使用它时,我得到一个错误。我做错了什么 import selenium base_url = "https://www.nationalevacaturebank.nl" start_url = "https://www.nationalevacaturebank.nl/vaca

下面我将学习如何构建一个webscraper来获取工作列表。现在我正试图跟随另一个网站。我遇到了一个问题,我不知道如何提取各个工作列表的链接

当我检查页面时,我找到了需要的元素

当我复制xpath并在代码中使用它时,我得到一个错误。我做错了什么

import selenium 
base_url = "https://www.nationalevacaturebank.nl"     
start_url = "https://www.nationalevacaturebank.nl/vacature/zoeken?query=&location=&distance=city&limit=100&sort=relevance&filters%5BcareerLevel%5D%5B%5D=Starter&filters%5BeducationLevel%5D%5B%5D=MBO" 
driver = webdriver.Firefox()    
elem = driver.find_element_by_xpath("//*[@id="search-results-container"]/div/div[1]/div[2]/article/job/a")

>>NoSuchElementException: Message: Unable to locate element: //*[@id="search-results-container"]/div/div[1]/div[2]/article/job/a

首先,你应该连接到你的网站

第二,你应该使用
waits
你可以读到它

代码应该类似于:

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


base_url = "https://www.nationalevacaturebank.nl"     
start_url = "https://www.nationalevacaturebank.nl/vacature/zoeken?query=&location=&distance=city&limit=100&sort=relevance&filters%5BcareerLevel%5D%5B%5D=Starter&filters%5BeducationLevel%5D%5B%5D=MBO" 
my_xpath = '//*[@id="search-results-container"]/div/div[1]/div[2]/article/job/a'
driver = webdriver.Firefox()
driver.get(start_url)  
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, my_xpath)))
编辑

我要获取单个工作列表的所有链接,您可以创建链接列表并附加主题:

wait = WebDriverWait(driver, 10)
elements = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="search-results-container"]//article/job/a')))
list_of_links = []
for i in elements:
    list_of_links.append(i.get_attribute('href'))
    # print(f"link = {i.get_attribute('href')}")
print(list_of_links)

希望这对你有帮助

在搜索“我的代码”中的元素之前,您错过了驱动程序。获取(开始url)。在我的代码片段中意外删除了它,我能得到所有的链接吗?现在我只得到一个链接为什么
els=driver.find\u elements\u by\u xpath(my\u xpath)在els中为e:print(e)
不起作用?因为那会给我一个循环。为什么使用EC.element的示例有效,而没有找到_元素?我真的很难理解。对不起,我是个傻瓜没关系!正如我在上面提供的selenium站点中所解释的那样,等待元素真正可见或可点击,这是一个非常重要的概念……您可以在元素之间循环!您只需要将它们放在一个variableok中,但是在元素可见之后,是否不可能获取列表中的所有元素?就像xpath通过查找查找元素一样。当我使用
element=wait.until(EC.element可点击((driver.find\u elements\u by\u xpath(my\u xpath)))时,我遇到了一个错误。