Попытка получить местоположение объявлений о вакансиях на веб-сайте с помощью python

#python #selenium-webdriver

#python #selenium-webdriver

Вопрос:

Я пытаюсь получить тег location для каждой вакансии, чтобы фильтровать их на основе местоположения, поскольку эта опция недоступна в Поиске работы из дома, и я использую python с selenium.

 from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import pandas as pd

driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

driver.get("https://www.seek.com.au/jobs?where=Work from home")
assert "SEEK" in driver.title

location = WebDriverWait(driver, 25).until(EC.visibility_of_all_elements_located((By.XPATH,
                                                                                   '("//*[@id=""app""]/div/div'
                                                                                   '/div[4]/div/div[3]/section'
                                                                                   '/div[2]/div/div[2]/div["'''
                                                                                   '"1]/div/div[2]/div/div[1]/'
                                                                                   'div[2]/article/div[1]/span'
                                                                                   '[2]/span/strong/span/span"'
                                                                                   ')')))``
  

Похоже, что WebDriverWait истекает при попытке найти элемент, местоположение которого указано в виде текста (несмотря на попытки сумасшедшего времени ожидания)

 Traceback (most recent call last):
  File "C:/Users/meagl/Desktop/Python/grabjobs/grabjobs.py", line 13, in <module>
    location = WebDriverWait(driver, 25).until(EC.visibility_of_all_elements_located((By.XPATH,
  File "C:Usersmeaglanaconda3envsPythonlibsite-packagesseleniumwebdriversupportwait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
  

XPATH, который я использую, находится на самом верху. (В настоящее время отображается как Sydney)
Каков мой следующий шаг здесь?

Ответ №1:

Похоже, что в вашем XPath есть проблема. Поскольку я использовал приведенный ниже код, и он напечатал все местоположения для всех 20 заданий на странице:

 driver.get("https://www.seek.com.au/jobs?where=Work from home")
assert "SEEK" in driver.title
location = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[contains(text(),'location:')]")))
for loc in location:
    print(loc.text)
  

Вывод

введите описание изображения здесь

Примечание: Вы можете поиграть со строкой, если просто хотите получить название города.

Ответ №2:

Всякий раз, когда вы выполняете такого рода операции, следует тщательно выбирать локатор, и здесь используемые xpaths не работают. Использование xpath таким образом //*[text()='location:'] решит вашу проблему.