【问题标题】:How does Oracle HRMS get job post's full description?Oracle HRMS 如何获取职位的完整描述?
【发布时间】:2021-07-18 07:03:17
【问题描述】:

由于对javascript的了解有限,我发现人力资源管理系统会刷新页面,并在职位列表页面的同一URL下显示职位详细信息页面。我假设网络请求会发送某种作业详细信息,但在检查请求后,其中大部分是 javascript 文件。

我们以 UR 职业页面为例 https://ps.its.rochester.edu/psc/PSApplyOnline/EMPLOYEE/HRMS/c/HRS_HRAM_FL.HRS_CG_SEARCH_FL.GBL?Page=HRS_APP_SCHJOB_FL&Action=U

有很多请求,但我找不到一个看起来可能包含职位详细信息或职位发布链接的请求。

然后我看了一下HTML代码(The Elements),发现job detail的href在js参数下:

<div class="ps_box-button psc_image_only hrs_cg_tapout_btn0" id="win0divHRS_VIEW_DETAILSPB$0">
  <span class="ps-button-wrapper" title="View Job Description">
    <a id="HRS_VIEW_DETAILSPB$0" class="ps-button" role="button" onclick="javascript:cancelBubble(event);" href="javascript:submitAction_win0(document.win0,'HRS_VIEW_DETAILSPB$0');">
      <img src="/cs/PSApplyOnline/cache/PT85713/PT_NUI_CHEVRON_1.svg" name="HRS_VIEW_DETAILSPB$IMG$0" class="ps-img" alt="View Job Description">
    </a>
  </span>
</div>

我的问题来了,如何使用关键字抓取特定职位的链接?似乎无法检索职位发布链接,因为即使我单击职位详细信息按钮,该页面也没有更改其链接,而只是刷新了其页面内容。但是,Oracle HRMS 如何获得完整的工作细节?通过某种请求?

提前欣赏任何想法和解决方案!

【问题讨论】:

    标签: javascript python selenium web-scraping


    【解决方案1】:

    您无法获取链接,导致网站使用 AJAX 请求更新页面。但是您可以解析所有需要的数据。例如,我从开始页面获取 ID,从详细信息页面获取日程安排。您可以使用下一个代码

    import requests
    import copy
    from bs4 import BeautifulSoup
    
    # create url
    url = 'https://ps.its.rochester.edu/psc/PSApplyOnline/EMPLOYEE/HRMS/c/HRS_HRAM_FL.HRS_CG_SEARCH_FL.GBL'
    
    # create session
    session = requests.Session()
    
    # get auth page
    start_page = session.get(url, params={
        'Page': 'HRS_APP_SCHJOB_FL', 'Action': 'U'
    })
    soup = BeautifulSoup(start_page.text, 'html.parser')
    
    # collect params
    form = soup.find('form', {'id': 'HRS_CG_SEARCH_FL'})
    params = {}
    for input_data in form.find_all('input', {'type': 'hidden'}):
        try:
            class_element = input_data['class']
        except KeyError:
            params[input_data['id']] = input_data['value']
    
    # find content panel
    content_panel = soup.find('div', {'class': 'psc_panel-content'})
    
    # find elements
    jobs_list = content_panel.find('ul', {'class': 'ps_grid-body'})
    jobs = jobs_list.find_all('li', {'class': 'ps_grid-row'})
    for job in jobs:
        # get button data
        button_div = job.find('div', {'class': 'hrs_cg_tapout_btn0'})
        job_id = button_div.find('a')['id']
    
        # display id
        job_id_display_element = job.find('div', {'class': 'psc_num'})
        id_data = job_id_display_element.find(
            'span', {'class': 'ps_box-value'}
        ).text
    
        # get detail info
        send_params = copy.deepcopy(params)
        send_params['ICAction'] = job_id
    
        # details
        detail = session.post(url, data=send_params)
        soup_detail = BeautifulSoup(detail.content, 'html.parser')
    
        # find schedule
        main_data = soup_detail.find_all('div', {'class': 'psc_bordert'})
        groups = main_data[1].find_all('div', {'class': 'ps_box-scrollarea-row'})
        time = groups[1].find('span', {'class': 'ps_box-value'}).text
    
        print('JOB ID: {}. Schedule: {}'.format(id_data, time.replace('\n', '')))
    
    JOB ID: 229725. Schedule: 8 AM-6:00 PM
    JOB ID: 229926. Schedule: VARIES; E/O WKND/HOL
    JOB ID: 229968. Schedule: D/E/N; WE/HOL
    JOB ID: 229973. Schedule: D/E/N; WE/HOL
    JOB ID: 229967. Schedule: D/E/N; WE/HOL
    JOB ID: 229918. Schedule: VARIES; E/O WE/HOL
    ...
    

    附:如果我的回答对您有帮助,请将其标记为正确:)

    【讨论】:

    • 非常感谢您的回答!我还想知道使用什么样的 AJAX 请求来更新网站。由于我查看了网络检查,XRH 请求似乎不包含任何内容;其他都是关于 CSS 和 js 的。
    • 您需要详细检查网络。如果可以,请将答案标记为正确
    猜你喜欢
    • 2021-08-02
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多