【问题标题】:Trying to loop through profile lists using Selenium尝试使用 Selenium 遍历配置文件列表
【发布时间】:2021-08-22 10:43:48
【问题描述】:

我正在尝试遍历所有个人资料并将人员姓名、工作资料和位置存储在一个列表中。这是我所在的 LinkedIn 屏幕的屏幕截图:

这是我必须循环的 li html 标记:

<li class="reusable-search__result-container ">
          
          <div class="entity-result  ">
          
            <div class="entity-result__item">
  <div class="entity-result__image">
    <div class="display-flex align-items-center">
      
      <a class="app-aware-link" aria-hidden="true" href="https://www.linkedin.com/search/results/people/headless?geoUrn=%5B103644278%5D&amp;origin=FACETED_SEARCH&amp;keywords=python%20developer">
    <div id="ember522" class="ivm-image-view-model ember-view">  <div class="
    ivm-view-attr__img-wrapper ivm-view-attr__img-wrapper--use-img-tag display-flex
    
  ">
    <div class="EntityPhoto-circle-3-ghost-person ivm-view-attr__ghost-entity ">
<!---->    </div>
</div>

</div>
</a>

    </div>
  </div>
  <div class="entity-result__content entity-result__divider pt3 pb3 t-12 t-black--light">
    <div class="mb1">
      
    <div class="linked-area flex-1 cursor-pointer">
  
      
  <div class="t-roman t-sans">
    <span class="entity-result__title">
      <div class="display-flex">
  <span class="entity-result__title-line flex-shrink-1 entity-result__title-text--black ">
    <span class="entity-result__title-text  t-16">
      <a class="app-aware-link" href="https://www.linkedin.com/search/results/people/headless?geoUrn=%5B103644278%5D&amp;origin=FACETED_SEARCH&amp;keywords=python%20developer">
        <!---->LinkedIn Member<!---->
      </a>
<!---->    </span>
  </span>
<!----></div>

    </span>
  </div>

    <div>
      <div class="entity-result__primary-subtitle t-14 t-black">
        <!---->Software Developer<!---->
      </div>
        <div class="entity-result__secondary-subtitle t-14">
          <!---->United States<!---->
        </div>
    </div>

  

    
</div>


    </div>

      <div class="linked-area flex-1 cursor-pointer">
  
        <p class="entity-result__summary entity-result__summary--2-lines t-12 t-black--light ">
          <!---->Current: Full Stack Software<span class="white-space-pre"> </span><strong><!---->Developer<!----></strong><span class="white-space-pre"> </span>at GE Healthcare<!---->
        </p>
      
</div>


<!---->  </div>
  <div class="entity-result__actions entity-result__divider entity-result__actions--empty">
<!---->    <!---->
  </div>
</div>

          
</div>

        
        </li>

目前,我可以使用以下代码获取配置文件名称:

profile_names = []
linkedin_members = browser.find_elements_by_xpath('//span[@class="entity-result__title"]')

for linkedin_member in linkedin_members:
    name = linkedin_member.find_element_by_xpath('.//a[@class="app-aware-link"]').get_attribute('text').strip()
    profile_names.append(name)

但我无法获得工作地点和工作资料。任何人都可以指导我的代码吗?

我尝试了类似的方法,但它引发了错误:

profile_names = []
job_profiles = []

linkedin_members = browser.find_elements_by_xpath('//div[@class="linked-area flex-1 cursor-pointer"]')

for linkedin_member in linkedin_members:
    name = linkedin_member.find_element_by_xpath('.//a[@class="app-aware-link"]').get_attribute('text').strip()
    job_profile = linkedin_member.find_element_by_xpath('.//div[@class="entity-result__primary-subtitle"]').text
    profile_names.append(name)
    job_profiles.append(job_profiles)

【问题讨论】:

  • 能否请您指定运行代码时抛出的错误?
  • 它抛出了这个错误:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//一个[@class="app-aware-link"]"}
  • 但是现在已经排序了。

标签: python selenium automation


【解决方案1】:

另一种方法是:

members_serach_results_xpath = '//div[@class="entity-result__item"]'
member_name_xpath = '//span[contains(@class,"entity-result__title-text")]//span[@dir]'
member_location_xpath = '//div[contains(@class,"entity-result__secondary-subtitle")]'
member_job_title_xpath = '//div[@class="entity-result__item"]//div[contains(@class,"entity-result__primary-subtitle")]'

profile_names = []
profile_addresses = []
profile_job_titles = []
linkedin_members = browser.find_elements_by_xpath(members_serach_results_xpath)

for linkedin_member in linkedin_members:
    name = linkedin_member.find_element_by_xpath('.' + member_name_xpath).get_attribute('text').strip()
    profile_names.append(name)
    address = linkedin_member.find_element_by_xpath('.' + member_location_xpath).get_attribute('text').strip()
    profile_addresses.append(address)
    job_title = linkedin_member.find_element_by_xpath('.' + member_job_title_xpath).get_attribute('text').strip()
    profile_job_titles.append(job_title)

在这里,我将定位器作为参数放在代码之外。
最好不要将定位器硬编码到使用它的方法中。

【讨论】:

  • 稍后我一定会研究这段代码。感谢发帖:)
  • 我喜欢这种方法!只需在第 2 行和第 3 行指出您的 xpath,在单引号内使用单引号,entity-result__title-text 等类名应该用双引号括起来
  • @C.Peck 感谢您的更正!这完全是因为Java :) 我们总是使用" 来表示外部字符串,' 来表示内部字符串。与Python相反
【解决方案2】:

您只需要识别这些元素(我认为您可以使用带有 css 选择器的类来做到这一点),然后遍历元素并将文本附加到适当的数组中。

profile_names = []
linkedin_members = browser.find_elements_by_xpath('//span[@class="entity-result__title"]')

for linkedin_member in linkedin_members:
    name = linkedin_member.find_element_by_xpath('.//a[@class="app-aware-link"]').get_attribute('text').strip()
    profile_names.append(name)

user_positions = []

positions = browser.find_elements_by_css_selector('div.entity-result__primary-subtitle')

for position in positions:
    user_positions.append(position.text.strip())
    
user_locations = []

locations = browser.find_elements_by_css_selector('div.entity-result__secondary-subtitle')

for location in locations:
    user_locations.append(location.text.strip())


【讨论】:

  • 感谢它的工作!你能告诉我为什么我尝试过的代码不起作用吗?
  • 我遇到了这个错误:它抛出了这个错误:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector ":".//a[@class="app-aware-link"]"}
  • 本质上,我只想使用 1 for 循环来获取所有 3 件事的数据。您的解决方案完全正常,我会继续这样做,但只是想了解我哪里出错了。
  • 您的代码的问题在于//div[@class="linked-area flex-1 cursor-pointer"]。这个找到的 div 没有任何带有标签 a 的后代,所以 './/a[@class="app-aware-link"]' 没有找到任何东西。
  • 如果你愿意,我可以把它全部放在一个循环中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2015-10-27
相关资源
最近更新 更多