2016-06-16 12 views
0

セレンは初めてです。ウェブサイトを検索すると、各ページごとに10の結果が得られます。これらの結果は、ページにリスト(liタグ)として表示され、各リストには同じ属性が含まれています。私の条件が満たされたら、別の関連Webページに行き、必要なコンテンツを入手します。しかし、私のコードがリストのためにループし続けると、他のものと同じ属性を見つけることができません。ここに私のコードは次のとおりです。このコードでセレンは1つの結果のみを擦り込み、他の関連する結果を無視します

 p_url = "https://www.linkedin.com/vsearch/f?keywords=BARCO%2BNV%2Bkortrijk&pt=people&page_num=5"    
     driver.get(p_url) 

     time.sleep(5) 

     results = driver.find_element_by_id("results-container") 
     employees = results.find_elements_by_tag_name('li') 

     #emp_list = [] 
     #for i in range(len(employees)): 
     # emp_list.append(employees[i]) 


     for emp in employees: 
      try: 

       main_emp = emp.find_element_by_css_selector("a.title.main-headline") 
       name = emp.find_element_by_css_selector("a.title.main-headline").text 
       href = main_emp.get_attribute("href") 

       if name != "LinkedIn Member": 
        location = emp.find_element_by_class_name("demographic").text 
        href = main_emp.get_attribute("href") 
        print(href) 
        print(location) 

        driver.get(href) 
        exp = driver.find_element_by_id("background-experience") 

        amkk = exp.find_elements_by_class_name("editable-item") 

        for amk in amkk: 
         him = amk.find_element_by_tag_name("header").text 
         him2 = amk.find_element_by_class_name("experience-date-locale").text 

         if '\n' in him: 
          a = him.split('\n') 
          print(a[0]) 
          print(a[1]) 

         print(him2) 

      except Exception as exc: 
       print(exc) 
       continue 

それは初めてのために働くの後行main_emp = emp.find_element_by_css_selector("a.title.main-headline")ストップが作動します。結果として私はMessage: stale element reference: element is not attached to the page document

からエラーが出ました。私は、コンテンツがDOM構造から削除され、誰かが結果をリストに記入することを提案した投稿から削除されたと言いました。ここで私が試したのはemp_list = [] for i in range(len(employees)): emp_list.append(employees[i])ですが、うまくいきませんでした。

どうすればこの問題を解決できますか?

+0

あなたが使用しているHTMLを共有できるを使用する必要がありますか?私はあなたが行くページをチェックしました。結果コンテナ 'div 'に行くと、この要素の直接の子である単一の' li'はありませんが、それは最初の従業員には当てはまると言います。 – RemcoW

答えて

2

使用しているセレクタが間違っています。あなたはresults-container idを使って結果を得ています。これは正常に動作しますが、要素のフォームを収集することは機能しません。それは、従業員だけでなく、私はかなり理由がわからない多くの要素を戻しています。

セレクタをこの1つのセレクタに変更すると、従業員のみが表示され、不要な要素は表示されません。

employees = results.find_elements_by_css_selector("ol[id='results']>li") 

編集 あなたが従業員を開き、あなたは、新しいタブで従業員を開いてみてくださいここにあなたの行動を実行し、その後、タブを閉じたいかもしれない要素のリストを失っているので。

例:

for emp in employees: 
      try: 
        main_emp = emp.find_element_by_css_selector("a.title.main-headline") 
        # Do stuff you need... 

        # Open employee in new tab (make sure Keys is imported) 
        main_emp.send_keys(Keys.CONTROL + 't') 
        # Focus on new tab 
        driver.switch_to_window(d.window_handles[1]) 

        # Do stuff inside the employee page 
        # Close the tab you opened 
        driver.close() 
        # Switch back to the first tab 
        driver.switch_to_window(d.window_handles[0]) 

注:OSXのために、あなたはmain_emp.send_keys(Keys.COMMAND + 't')

+0

あなたの答えRemcoWをありがとう。しかし、私はまだ同じ問題があります。関連するWebページでは、このコードは3番目のメンバで動作し、コンテンツを取得します。同じページで、コードメンバーは4人目のメンバーになります。しかし、私はまだ '古い要素参照:要素がページ文書に添付されていません.'というエラーがあります。私の推測では、ループの中で私はメンバーのプロフィールページに行き、これが起こると 'employees 'によって保持されたすべての情報が失われていると思います。 –

+0

@mlee_jordanうん、まさにそれが起こっている。 – RemcoW

+0

@mlee_jordan新しい編集をチェックしてください。これはあなたを助けるかもしれません。 – RemcoW

関連する問題