Селен Питон |'find_elements_by_class_name' ничего не возвращает - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь вычеркнуть названия должностей из динамического списка вакансий. Когда я использую функцию find_elements_by_class_name, функция ничего не возвращает. Я новичок в селене, поэтому я не уверен, что просто делаю что-то неправильно или неправильно понимаю функциональность.

Страница, которую я пытаюсь почистить: https://recruit.hirebridge.com/v3/CareerCenter/v2/?cid=7724

from selenium import webdriver
import time

#define the path for the chrome webdriver
chrome_path = r"C:/web/jobListing/chromedriver.exe"

#create a instance of the webdriver
driver = webdriver.Chrome(chrome_path)

driver.get("https://recruit.hirebridge.com/v3/CareerCenter/v2/?cid=7724")
time.sleep(10)
jobs = driver.find_elements_by_class_name("col-md-8 jobtitle")

print("starting print")
for job in jobs:
    print(job.text)

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Попробуйте:

jobs = driver.find_elements_by_xpath("//div[@class='col-md-8 jobtitle']/a")

Я переключил элемент поиска по классу для xpath, так у вас больше гибкости, и в целом он работает лучше, я предлагаю вам взглянуть на него!

0 голосов
/ 17 октября 2019

Основная причина:

col-md-8 и jobtitle - это два разных класса. Когда вы используете find_element_by_class_name, он внутренне преобразует имя класса в селектор css и пытается найти элемент.

Ниже приведено доказательство того, что find_element_by_class_name использует css для внутреннего использования.

enter image description here

Решение:

Поскольку Selenium использует css, вы должны убедиться, что классы объединены, что означает class1.class2.class3. Проще говоря replace all white spaces with single dot в имени класса из пользовательского интерфейса.

Как реализовать это в вашей ситуации:

Вы должны использовать приведенный ниже синтаксис.

driver.find_element_by_class_name('col-md-8.jobtitle')
0 голосов
/ 17 октября 2019

Похоже на ошибку? Это работает:

jobs = driver.execute_script("""
  return document.getElementsByClassName("col-md-8 jobtitle")
""")
...