1

"5dbnhpbwuny6rmr65h86"을 찾는 이름과 버튼이 Python의 다른 div에 있기 때문에 Selenium에서이 유형의 버튼을 누르는 데 문제가 있습니다.div에서 Selenium을 사용하여 콘텐츠 검색시 문제가 발생했습니다.

전체 HTML 코드 : https://codeshare.io/a39b3g

Image HTML

예 HTML 코드 :

<div class="o_kanban_view o_kanban_dashboard o_pos_kanban o_cannot_create o_kanban_ungrouped" style="display: flex;"><div class="o_kanban_record"> 
          <div class="o_kanban_card_header"> 
           <div class="o_kanban_card_header_title"> 
            <div class="o_primary">5dbnhpbwuny6rmr65h86</div> 
            <div class="o_secondary">Unused</div> 
           </div> 
           <div class="o_kanban_manage_button_section"> 
            <a class="o_kanban_manage_toggle_button" href="#">Más <i class="fa fa-caret-down"></i></a> 
           </div> 
          </div> 
          <div class="container o_kanban_card_content o_visible"> 
           <div class="row"> 
            <div class="col-xs-6 o_kanban_primary_left"> 






       <button class="btn btn-default oe_kanban_action oe_kanban_action_button" data-name="open_session_cb" data-type="object" type="button">New Session 
       </button> 
      </div> 
            <div class="col-xs-6 o_kanban_primary_right"> 




            </div> 
           </div> 
          </div><div class="container o_kanban_card_manage_pane o_invisible"> 
           <div class="row"> 
            <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view"> 
             <div class="o_kanban_card_manage_title"> 
              <span>Ver</span> 
             </div> 
             <div> 
              <a data-name="341" data-type="action" href="#" class=" oe_kanban_action oe_kanban_action_a">Sesiones</a> 
             </div> 
             <div> 
              <a data-name="342" data-type="action" href="#" class=" oe_kanban_action oe_kanban_action_a">Pedidos de ventas</a> 
             </div> 
            </div> 
            <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new"> 
             <div class="o_kanban_card_manage_title"> 
              <span>Informes</span> 
             </div> 
             <div> 
              <a data-name="343" data-type="action" href="#" class=" oe_kanban_action oe_kanban_action_a">Pedidos</a> 
             </div> 
            </div> 
           </div> 

           <div class="o_kanban_card_manage_settings row"> 
            <div class="col-xs-12 text-right"> 
             <a data-type="edit" href="#" class=" oe_kanban_action oe_kanban_action_a">Configuración</a> 
            </div> 
           </div> 
          </div> 
         </div><div class="o_kanban_record o_kanban_ghost"></div><div class="o_kanban_record o_kanban_ghost"></div><div class="o_kanban_record o_kanban_ghost"></div><div class="o_kanban_record o_kanban_ghost"></div><div class="o_kanban_record o_kanban_ghost"></div><div class="o_kanban_record o_kanban_ghost"></div></div> 

나는 그런 일 함께했다,하지만 난 적합한 솔루션이 없습니다 :

for div in driver.find_elements_by_xpath("//div[@class='o_kanban_record']"): 
    if div.find_elements_by_xpath("//div[contains(text() , '5dbnhpbwuny6rmr65h86')]") != []: 
    div.find_elements_by_xpath("//button[contains(text() , 'New Session')]").click() 

감사!

+0

더 나은 분석을 위해 이미지 대신 형식이 지정된 텍스트로 질문을 업데이트 할 수 있습니까? – DebanjanB

+0

@DebanjanB - 전체 코드를 넣을 수 없습니다. 단편을 업로드합니다. – jbelenus

+0

문자열 'iuijg6bzr2xs9gsueq2i'이 HTML에 없으므로'iuijg6bzr2xs9gsueq2i '문자열이 동적 인 것처럼 보입니다. 자동화하려는 수동 단계를 요약 할 수 있습니까? – DebanjanB

답변

1

click()New SessionStrings 예 : iuijg6bzr2xs9gsueq2i 또는 5dbnhpbwuny6rmr65h86, 당신은 함수의 도움을 받아 관련 New Session 버튼을 클릭 얻을 수있는 String를 전달할 수 있습니다.

버튼의 상태가 감지 최종 솔루션 :

driver.find_elements_by_xpath("//div[@class='o_primary' and contains(text(), '%s')]/parent::div[*]/parent::div[*]/parent::div[*]/descendant::button[@data-name='open_session_cb']" % (shop))[0].click() 

또는

driver.find_elements_by_xpath("//div[@class='o_primary' and contains(text(), '%s')]/parent::div[*]/parent::div[*]/parent::div[*]/descendant::button[@data-name='open_ui']" % (shop))[0].click() 
+1

귀하의 솔루션은 완벽하고 깨끗합니다. – jbelenus

1
  1. 모든 div의 버튼 가져 오기 : DIV 요소의 목록을

    divs = driver.find_elements_by_css_selector(".o_primary") 
    buttons = driver.find_elements_by_css_selector(".btn.btn-default.oe_kanban_action.oe_kanban_action_button") 
    
  2. 이동하고 필요를 발견하고 해당 버튼에 대한 조치를 클릭하십시오

    for div, button in zip(divs, buttons): 
        if div.text == "5dbnhpbwuny6rmr65h86": 
        button.click() 
    
+0

괜찮은 것 같지만 다음과 같은 것들이 있습니다 :'TypeError : zip 인자 # 1은 반복을 지원해야합니다'변수에리스트가 필요합니까? – jbelenus

+0

@jbelenus, 죄송합니다, 저의 실수였습니다. 나는 나의 대답을 업데이트했다. 다시 시도하십시오. –

+0

나는 zip 사용법을 알지 못했지만, 이미 그 과정을 통해 배웠습니다. 고마워요! – jbelenus

0

당신이에 대한 Splinter을 들어 본 적이 있습니까? 그것은 셀레늄의 상단에 추상화 계층이고 그것을 당신이 텍스트에 의한 요소를 찾을 수 있습니다 : 그것은

element = driver.find_by_text('5dbnhpbwuny6rmr65h86').first 
element.find_by_xpath("//button[contains(text() , 'New Session')]").first.click() 

참고해야하므로 https://splinter.readthedocs.io/en/latest/finding.html

driver.find_by_text('5dbnhpbwuny6rmr65h86') 

이 요소의 목록을 반환 find_by_text : 테스트되지 않은