#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:']
решит вашу проблему.